HTTP
协议是超文本传输协议,用于客户端和服务器之间的通信。
TCP/IP
协议族分为4层:应用层、传输层、网络层、数据链路层。
HTTP
是应用层的协议(FTP
文件传输协议,DNS
域名系统)
TCP/IP 通信传输流
- 发送端的客户端在应用层(HTTP协议)发送一个Web页面的HTTP请求。
- 在传输层(TCP协议)把从应用层收到的数据(HTTP请求报文)进行分割,并在各个报文上打上标记序号及端口号后转发给网络层。
- 在网络层(IP协议),增加作为通信目的地的MAC地址转发给链路层。
- 接收端的服务器在链路层接收到数据,按序往上传发送,一直到应用层。当传输到应用层,才算真正接收到客户端发送过来的请求。
HTTP 协议的特点:
- 无状态协议:HTTP协议自身不对请求和响应之间的通信状态进行保存。(为了更快的处理大量事物,减少服务器CPU及内存资源的消耗)。为了实现期望的保持状态
功能,引入了Cookie
技术。
Cookie
技术在请求和响应报文中写入Cookie
信息。但Cookie
保存在客户端,一些重要信息不安全,所以把重要的信息放在服务器中,也就是Session
。Cookie
拿到Session id
,找到对应的Session
。 - 无连接协议
传输层:TCP
(三次握手,四次挥手)
TCP三次握手:TCP协议把数据发送出去后,不会对传送后的情况置之不理,一定会向对方确认是否发送成功。握手中使用了TCP的标志:SYN和ACK。
发送端先发送一个带有SYN标志的数据包给对方。接收端收到后,回传一个SYN/ACK标志的数据包以表示传达信息确认。最后,发送端再回传一个带ACK的数据包,代表握手结束。
1.1版本,引入Keep-alive模式,保持当前TCP连接,避免了建立或重新建立。
![](https://img.haomeiwen.com/i3331022/0d4386f050afa6d8.png)
1.0版本,无状态(每个请求都是独立的)无连接(每次只有一个请求)
![](https://img.haomeiwen.com/i3331022/f9c43d772020c833.png)
状态码
- 2XX
- 200(正常)
表示一切正常,返回的是正常请求结果 - 204 请求成功,但无资源返回
- 206 部分返回
- 3XX 重定向
- 301 永久性重定向
- 303 应采用GET方式请求
- 304 服务器资源未更新,可以直接使用客户端未过期的缓冲
- 302/307(临时重定向)
指出被请求的文档已被临时移动到别处,此文档在新的URL在Location响应头中给出
- 4XX 客户端错误
- 400 Bad Request 请求报文存在错误
- 401 Unauthorizized 认证失败
- 403 Forbidden 请求资源被服务器拒绝
- 404 Not Found 无请求资源, 服务器上不存在客户器所请求的资源
- 401/407(未经授权)
表示客户机访问的是一个受口令和密码保护的页面,结合使用一个WWW-Authenticate响应头,提示客户机应重新发送出一个带有Authorization的请求消
- 5XX 服务器
- 500 服务器执行请求发生错误
- 503 服务器处于超负载或正在进行停机维修
HTTP URL
HTTP默认端口80
HTTPS 默认端口443
HTTP的URL是怎么组成为一个接口的。如图:
![](https://img.haomeiwen.com/i3331022/c85cf2ec9e95c197.jpg)
一个URL就是一个接口,接口大致会分为一下几个部分:
- 请求协议:
http --- 普通的http请求
https --- 加密的http请求,传输数据更加安全
ftp --- 文件传输协议,主要用来传输文件 - 请求IP:就是指提供接口的系统所部署的服务器地址
- 请求端口:如果不填端口,默认是80,否则需要填写端口号
- 接口路径:指系统提供的接口在什么位置
- 接口参数:参数在接口路径后,用“?”来表示路径地址完了,剩下的都是参数了,用“&”来区分参数个数, 如下示例:
http://127.0.0.1:8080/light?opt=open&use=yy&pwd=123456
HTTP请求消息
请求消息的结构:
![](https://img.haomeiwen.com/i3331022/ec56179bce42d613.png)
GET /simple.html HTTP/1.1 请求行(请求方法,URI协议版本)
多个消息头
空行
(GET请求空行下面无实体,Post请求下面有实体)
HTTP响应消息
响应消息的结构
![](https://img.haomeiwen.com/i3331022/076378221506d44b.png)
HTTP/1.1 200 OK 状态行(协议版本,状态码,原因短语)
多个消息头
一个空行
body 实体内容
![](https://img.haomeiwen.com/i3331022/87fe73b7eef9991f.png)
请求方法种类
-
GET方式:获取资源
用来请求访问已被URI识别的资源(我想要访问你的资源)
举例:GET /server/ParamsServlet?paraml=abc¶m2=xyz HTTP/1.1
特点:传输的数据量是有限制的,一般限制在1KB以下 -
POST方式:传输实体主体
(我想把这条信息告诉你)
举例:
POST /servlet/ParamServlet HTTP/1.1
Host:
Content-Type:application/x-www-form-urlencoded
Content-Length:28
param-abc¶m2=xyz
特点:传送的数据量要比GET方式传送的数据量大得多。
网友评论