HTTP协议定义了浏览器(万维网客户端)如何向万维网服务器请求万维网文档,以及服务器怎样把文档发送给客户端。
万维网的工作过程:
每个万维网站点都有一个服务器进程,该进程一直在监听TCP协议的80端口,看是否有连接请求。如果有连接建立请求,则与之建立起TCP连接,然后客户端向服务器发起访问某页面的请求,服务器就将该页面作为响应返回给客户端,然后释放TCP连接。
HTTP协议的特点:无连接、无状态
无连接:HTTP协议虽然基于面向连接的TCP协议,但是在客户端发起请求前,不会事先建立HTTP连接。
无状态:不会记录客户端信息,即同一个客户第二次继续访问同一个页面时,服务器的反应和第一次一样(不会因为你是老客户给你优惠),因为服务器不会记得你曾经访问过,更不会记录你访问过多少次(简化了服务器的设计,容易支持大量的并发请求)。
当用户点击超链接请求访问万维网文档时,HTTP协议首先会和服务器建立TCP链接,使用三次报文握手。当三次报文握手的前两部分完成时,客户端会将请求报文作为第三次握手报文发送给服务器。服务器接收后就将请求的页面作为响应报文发送给客户端,发送完毕后断开TCP连接。
请求一个万维网文档的总时间等于建立TCP连接的一个RTT时间,请求和接收万维网文档的一个RTT时间,以及传输万维网文档的时间。
HTTP协议有1.0和1.1两个版本。
HTTP1.0是非持续性连接,即服务器返回请求报文后就释放TCP连接,如果客户端想继续请求页面,则必须再建立TCP连接,又得耗费两个RTT时间,并且每建立一次TCP连接都要分配缓存和变量,增加了服务器的负担。
HTTP1.1是持续性连接,即服务器返回报文后一定时间内不会释放TCP连接,接下来同一个客户想要再次请求页面,客户端和服务器就可以在这条连接上继续发送请求和响应报文。
HTTP1.1的持续性连接有两种方式:流水线方式和非流水线方式。
非流水线方式:即客户端必须等待接收上一个请求的响应报文之后才可以发送新的请求。再发送一次请求,和非持续性连接相比,该方式节省了一个RTT时间。但该方式有一个缺点,即在服务器发送完一个对象后,TCP连接处于空闲状态。
流水线方式:客户端不必等待接收响应报文,在发送了上一个请求报文后直接可以发送下一个请求报文,服务器也可连续返回响应报文。因此,客户端访问所有的对象,只需花费一个RTT时间(使TCP连接的空闲时间减少了,提高了下载效率)。