HTTP

一、HTTP概况

Web的应用层协议是超文本传输协议(HyperText Transfer Protocol,HTTP),它是Web的核心。HTTP由两个程序实现:一个客户程序和一个服务器程序。客户程序和服务器程序运行在不同的端系统中,通过交换HTTP报文进行回话。HTTP定义了这些报文的结构以及客户和服务器进行报文交换的方式。

HTTP使用TCP作为它的支撑运输协议(不是UDP)。HTTP客户首先发起一个与服务器的TCP连接。一旦连接建立,该浏览器和服务器进程就可以通过套接字接口(Socket)访问TCP。客户向它的套接字接口发送HTTP请求报文并从它的套接字接口接受HTTP相应报文。类似地,服务器从它的套接字接口接受HTTP请求报文和向它的套接字接口发送HTTP相应报文。

服务器向客户发送被请求的文件,而不存储任何关于该客户的状态信息,因为HTTP服务器不保存关于客户的任何信息,所以说HTTP是一个无状态协议。

二、非持续连接和持续连接

当每个客户和服务端的请求/相应对是经过一个单独的TCP连接发送时,该应用程序被称为使用非持续连接,而当所有请求/应用对经过相同TCP连接发送时,该应用程序被称为持续连接。HTTP可以使用持续连接和非持续连接,但是默认使用持续连接。

2.1 非持续连接

HTTP
对于非持续连接来说,每个TCP连接在服务器发送一个对象后关闭,每个TCP只传输一个请求报文和一个响应报文,在上面的例子中,总共产生了11个TCP连接。(注意这些TCP连接可以串行也可以并行)。

2.2 RTT

往返时间(Round-Trip TIme,RTT)是用来估算从客户请求HTML基本文件到该客户收到整个文件所花费的时间。RTT包括分组传播时延、分组在中间路由器和交换机上的排队时延以及分组处理时延。

2.3 三次握手

考虑当用户点击超链接时会发生什么现象。整个过程如下所示:
HTTP
整个过程涉及一次“三次握手”过程:
客户向服务器发送一个小TCP报文段,服务器用一个小TCP报文段做出响应和确认,最后,客户向服务器返回确认。
三次握手中前两个部分所耗费的时间就占用了一个RTT。完成了三次握手的前两个部分后,客户结合三次握手的第三部分(确认)向该TCP连接发送一个HTTP请求报文。一旦该请求到达服务器,服务器就在该TCP连接上发送HTML文件。该HTTP请求/响应用去了另一个RTT。
总响应时间(粗略的来说)就是两个RTT加上服务器传输HTML文件的时间。

2.4 持续连接

非持续连接有一些缺点。首先,必须为每一个请求的对象建立和维护一个全新的连接。对于每个这样的连接,在客户和服务器中都要分配TCP的缓冲区和保持TCP变量,这给Web服务器带来了严重的负担,因为一台Web服务器可能同时服务于数以百计不同的客户的请求。第二,每一个对象都要经受两倍RTT的交付时延,即一个RTT用于创建TCP,另一个RTT用于接受和请求一个对象。

在采用持续连接的情况下,服务器在发送响应后保持该TCP的连接打开。在相同的客户与服务器之间的后续请求和响应报文能够通过相同的连接进行传送。特别是,一个完整的Web页面(上例中的HTML基本文件加上10个图行)可以用单个TCP连接进行传送。更有甚者,位于同一台服务器的多个Web页面在从该服务器发送给同一个客户时,可以在单个持续TCP连接上进行;可以一个接一个地发出对对象的这些请求,而不必等待对未决请求(流水线)的回答。一般来说,如果一条连接经过一定时间间隔(一个可配置的超时间隔)仍未被使用,HTTP服务器就关闭该连接。HTTP的默认模式是使用带流水线的持续连接。

三、HTTP报文格式

四、用户与服务器的交互:cookie

五、Web缓存

六、条件GET方法