1. 概述
超文本传送协议 HTTP 是一个应用层协议,HTTP 使用了面向连接的 TCP 作为运输层协议,保证了数据的可靠传输。 HTTP 不必考虑数据在传输过程中被丢弃后又怎样被重传。但是,HTTP 协议本身是无连接的。这就是说,虽然 HTTP 使用了 TCP 连接,但通信的双方在交换 HTTP 报文之前不需要先建立 HTTP 连接。
HTTP 协议是无状态的。也就是说,同一个客户第二次访问同一个服务器上的页面时,服务器的响应与第一次被访问时的相同(假定现在服务器还没有把该页面更新),因为服务器并不记得曾经访问过的这个客户,也不记得为该客户曾经服务过多少次。 HTTP 的无状态特性简化了服务器的设计,使服务器更容易支持大量并发的 HTTP 请求。
请求一个万维网文档所需的时间是该文档的传输时间(与文档大小成正比)加上两倍往返时间 RTT (一个 RTT 用于连接 TCP 连接,另一个 RTT 用于请求和接收万维网文档 )。HTTP/1.1 协议使用了持续连接,万维网服务器在发送响应后仍然在一段时间内保持这条连接,使同一个客户(浏览器)和该服务器可以继续在这条连接上传送后续的 HTTP 请求报文和响应报文。
HTTP/1.1 协议的持续连接有两种工作方式,即非流水线方式(without pipelining)和流水线方式(with pipelining) 。非流水线方式的特点,是客户在收到前一个响应后才能发出下一个请求。因此,在 TCP 连接已建立后,客户每访问一次对象都要用去一个往返时间 RTT。流水线方式的特点,是客户在收到 HTTP 的响应报文之前就能够接着发送新的请求报文。于是一个接一个的请求报文到达服务器后,服务器就可连续发回响应报文。
2. HTTP 的报文结构
2.1 请求报文
CRLF 表示回车换行,回车表示光标回到本行开始,换行表示到达下一行。
举例: