典型HTTP会话
在像 HTTP 这样的Client-Server(客户端-服务器)协议中,会话分为三个阶段:
- 1.客户端建立一条 TCP 连接(如果传输层不是 TCP,也可以是其他适合的连接)。
- 2.客户端发送请求并等待应答。
- 3.服务器处理请求并送回应答,回应包括一个状态码和对应的数据。
从 HTTP/1.1 开始,连接在完成第三阶段后不再关闭,客户端可以再次发起新的请求。这意味着第二步和第三步可以连续进行数次。
(1)建立连接
通过TCP的三次握手进行连接;
(2)客户端发送请求
连接建立完成后,客户端就可以发送请求。典型的请求包括三部分:
1.第一行包括请求方法及请求参数:
文档路径,不包括协议和域名的绝对路径 URL
2.使用的 HTTP 协议版本
接下来的行每一行都表示一个 HTTP 首部,为服务器提供关于所需数据的信息(例如语言,或 MIME 类型),或是一些改变请求行为的数据(例如当数据已经被缓存,就不再应答)。这些 HTTP 首部组成以一个空行结束的一个块。
3.最后一块是可选数据块,包含更多数据,主要被 POST 方法所使用。
屏幕快照 2018-05-16 20.28.28.png
注意最后的空行,它把首部与数据块分隔开。由于在 HTTP 首部中没有 Content-Length,数据块是空的,所以服务器可以在收到代表首部结束的空行后就开始处理请求。
(3)服务器响应结构
1.第一行是 状态行
包括使用的 HTTP 协议版本,状态码和一个状态描述(可读描述文本)。
2.接下来每一行都表示一个 HTTP 首部
为客户端提供关于所发送数据的一些信息(如数据大小,使用的压缩算法,缓存指示)。与客户端请求的头部块类似,这些 HTTP 首部组成一个块,并以一个空行结束。
3.最后一块是数据块,包含了响应的数据 (如果有的话)。
屏幕快照 2018-05-16 20.33.58.png