《计算机网络》---HTTP
HTTP协议定义了浏览器(即万维网客户进程)怎样向万维网服务器请求万维网文档, 以及服务器怎样把文档传送给浏览器。
从层次的角度看,HTTP是面向事务的应用层协议,它是万维网上能够可靠地交换文件(包括文本、声音、图像等各种 多媒体文件)的重要基础。请注意,HTTP不仅传送完成超文本跳转所必需的信息,而且也传送任何可从互联网上得到的信息,如文本、超文本、声音和图像等。
注:所谓事务(transaction)就是指一系列的信息交换,而这一系列的信息交换是一个不可分割的整体,也就是说,要么 所有的信息交换都完成,要么一次交换都不进行.
服务器进程,它不断地监听TCP的端口 80,以便发现是否有 浏览器 发出连接建立请求。 一旦监听到连接建立请求并建立了 TCP连接之后,浏览器就向万维网服务器发出浏览某个 页面的请求,服务器接着就返回所请求的页面作为响应。最后,TCP连接就被释放了。在 浏览器和服务器之间的请求和响应的交互,必须按照规定的格式和遵循一定的规则。这些格式和规则就是超文本传送协议HTTP。
HTTP规定在HTTP客户与HTTP服务器之间的每次交互,都由一个ASCII码串构成的 请求和一个类似的通用互联网扩充,即“类MIME (MIME-like)的响应组成。HTTP报文 通常都使用TCP连接传送。
用户浏览页面的方法有两种:一种方法是在浏览器的地址窗口中键入所要找的页面的 URL,另一种方法是在某一个页面中用鼠标点击一个可选部分,这时浏览器会自动在互联网 上找到所要链接的页面。
HTTP使用了面向连接的TCP作为运输层协议,保证了数据的可靠传输。HTTP不必考虑数据在传输过程中被丢弃后又怎样被重传。但是,HTTP协议本身是无连接的。这就是说,虽然HTTP使用了 TCP连接,但通信的双方在交换HTTP报文之前不需要先建立 HTTP连接。在1997年以前使用的是RFC 1945定义的HTTP/1.0协议。现在普遍使用的升 级版本HTTP/1.1已是互联网建议标准[RFC 723l]o
HTTP协议是无状态的(stateless),也就是说,同一个客户第二次访问同一个服务器上的 页面时,服务器的响应与第一次被访问时的相同(假定现在服务器还没有把该页面更新), 因为服务器并不记得曾经访问过的这个客户,也不记得为该客户曾经服务过多少次。HTTP 的无状态特性简化了服务器的设计,使服务器更容易支持大量并发的HTTP请求。
下面我们粗略估算一下,从浏览器请求一个万维网文档到收到整个文档所需的时间 。
用户在点击鼠标链接某个万维网文档时,HTTP协议首先要和服务器建立TCP 连接。这需要使用三报文握手。当建立TCP连接的三报文握手的前两部分完成后(即经过 了一个RTT时间后),万维网客户就把HTTP请求报文,作为建立TCP连接的三报文握手 中的第三个报文的数据,发送给万维网服务器。服务器收到HTTP请求报文后,就把所请求 的文档作为响应报文返回给客户。
求一个万维网文档所需的时间是该文档的传输时间(与文档大小 成正比)加上两倍往返时间RTT (一个RTT用于连接TCP连接,另一个RTT用于请求和 接收万维网文档。TCP建立连接的三报文握手的第三个报文段中的数据,就是客户对万维 网文档的请求报文)
HTTP/1.0的主要缺点,就是每请求一个文档就要有两倍RTT的开销。若一个主页上有 很多链接的对象(如图片等)需要依次进行链接,那么每一次链接下载都导致2xRTT的开 销。另一种开销就是万维网客户和服务器每一次建立新的TCP连接都要分配缓存和变量。 特别是万维网服务器往往要同时服务于大量客户的请求,所以这种非持续连接会使万维网服 务器的负担很重。好在浏览器都能够打开5〜10个并行的TCP连接,而每一个TCP连接处 理客户的一个请求。因此,使用并行TCP连接可以缩短响应时间。
HTTP/1.1协议较好地解决了这个问题,它使用了持续连接(persistent connection)o所谓 持续连接就是万维网服务器在发送响应后仍然在一段时间内保持这条连接,使同一个客户 (浏览器)和该服务器可以继续在这条连接上传送后续的HTTP请求报文和响应报文。这并 不局限于传送同一个页面上链接的文档,而是只要这些文档都在同一个服务器上就行。目前 一些流行的浏览器(如IE 11.0)的默认设置就使用了 HTTP/l.lo如果用户不愿意使用持续 连接的浏览器,可以选择IE浏览器上面的“工具” 一"Internet选项”-“高级”等项目, 把“HTTP 1.1设置”的选择取消即可。
HTTP/1.1协议的持续连接有两种工作方式:非流水线方式(without pipelining)和流水 线方式(with pipelining) 。
非流水线方式的特点,是客户在收到前一个响应后才能发出下一个请求。因此,在TCP 连接已建立后,客户每访问一次对象都要用去一个往返时间RTTo这比非持续连接要用去两 倍RTT的开销,节省了建立TCP连接所需的一个RTT时间。但非流水线方式还是有缺点 的,因为服务器在发送完一个对象后,其TCP连接就处于空闲状态,浪费了服务器资源。
流水线方式的特点,是客户在收到HTTP的响应报文之前就能够接着发送新的请求报 文。于是一个接一个的请求报文到达服务器后,服务器就可连续发回响应报文。因此,使用 流水线方式时,客户访问所有的对象只需花费一个RTT时间。流水线工作方式使TCP连接 中的空闲时间减少,提高了下载文档效率。
《计算机网络(第七版)》–谢希仁