HTTP的操作过程
HTTP协议定义了浏览器(即万维网客户进程)怎样向万维网服务器请求万维网文档,以及服务器怎样把文档传送给浏览器。HTTP是面向事务(一系列的信息交换,不可分割的整体)的应用层协议,它是万维网上能够可靠地交换文件的重要基础。
HTTP 不仅传送完成超文本跳转所必需的信息, 而且也传送任何可从互联网上得到的 信息, 如文本、 超文本、 声音和图像等。
万维网的大致工作过程,如下图:
每个万维网网点都有一个 服务器进程, 它不断地监听 TCP的端口80, 以便发现是否有浏览器向它发出连接建立请求。一旦监听到连接建立请求并建立了TCP 连接之后, 浏览器就向万维网 服务器发出 浏览某个页面的请求, 服务器接着就返回所请求的页面作为响应。 最后, TCP连接就被释放了。 在浏览器和 服务器之间的请求和响应的交互, 必须按照规定的格式和遵循一定的规则。 这些格式和规则就是超文本传送协议HTTP。
用户在点击鼠标链接某个万维网文档时, HTTP协议首先要和服务器建立TCP连接。 这需要使用三报文握手。
当建立TCP连接的三报文握手的前两部分完成后(即经过了 一个RTT时间后), 万维网客户就把 HTTP请求报文, 作为建立TCP连接的三报文握手中的第三个报文的数据, 发送给万维网服务器。 服务器收到HTTP请求报文后, 就把所请求的文档作为响应报文 返回给客户。
持续连接和非持续连接
HTTP/1.0的主要缺点,就是每请求 一个文档就要有两倍RTT的开销。 若一个主页上 有很多链接的对象(如图片等) 需 要依次进行链接, 那么每一 次链接下载都导致2 xRTT的开销。 另一种开销就是万维网客户和服务器每一 次 建立新的TCP 连接都要分配缓存和变量。
特别是万维网服务器往往要同时服务于大量客户的请求, 所以这种非持续连接会使万维网服务器的负担很重。 好在 浏览器都能够打开5 ~ 10个并行的TCP连接, 而每一个TCP连接处理客户的一个请求。 因此, 使用并行 TCP连接可以缩短响应时间。
HTTP/1.1协议较好地解决了这个问题,使用了持续链接,持续连接就是万维网服务器在发送 响应后仍然在 一段时间内保持这条连接, 使同 一个客户(浏览器)和该服务器可以继续在这条连接上 传送后 续的HTTP请求报文和响应报文。这并不局限于传送同 一个页面上链接的文档, 而 是只要这些文档都在同 一个服务器上就行。
持续连接的两种工作方式:
- 非流水线方式,是客户在收到前 一个响应后才能发出下一个请求。
- 流水线方式,是客户在收到 HTTP的响应报文之前就能够接着发送新的请求报文。