HTTP 协议是一种请求/响应型的协议。 客户端给服务器发送请求的格式是一个请求方法
(request method),URI,协议版本号,然后紧接着一个包含请求修饰符(modifiers),客
户端信息,和可能的消息主体的类MIME(MIME-like)消息。服务器对请求端发送响应的格式
是以一个状态行(status line),其后跟随一个包含服务器信息、 实体元信息和可能的实体主体
内容的类MIME(MIME-like)的消息。其中状态行(status line)包含消息的协议版本号和一
个成功或错误码。HTTP和MIME之间的关系如附录19.4节所阐述。
大部分的HTTP通信是由用户代理(user agent)发起的,由应用于一个源服务器资源的请求
构成。 最简单的情形,这可以通过用户代理(UA)和源服务器(O)之间的单一连接(v)来实
现。
请求链(Request chain)-------------------------------------- ----------
用户代理(UA)----------------单一连接(v)--------------源服务器(O)
<----------------------------------------------------------响应链(response chain)
有可能在请求/响应链中出现一个或多个中间者(intermediares),这是比较复杂的情形。常见
的中间者(intermediares)有三种:代理(proxy),网关(gateway)和隧道(tunnel)。代
理(proxy)是一种转发代理(a forwarding agent),它接收绝对URI(absoulute url,相对
于相对url)请求,重写全部或部分消息,然后把格式化后的请求发送到URI指定的服务器上。
网关是一种接收代理(receiving agent),它充当一个在服务器之上的层(layer),必要时它
会把请求翻译成为下层服务器的协议。隧道不改变消息而充当两个连接之间的中继点;它用于
通信需要穿过中间者(如防火墙)甚至当中间者不能理解消息内容的时候。
请求链(request chain)----------------------------------------
UA-----v-----A-----v-----B-----v-----C------------v-----------------O
<----------------------------------------响应链(response chain)
上图显示了用户代理(user agent)和源服务器之间的三个中间者(A,B和C)。整条链的请
求或响应将会通过四个被隔离开的连接。这个不同点很重要,因为某些HTTP通信选项有可能
只能采用最近的非隧道邻接点的连接,有可能只采用链的端点(end-point),或者也有可能只
采用于链上所有连接。 图表尽管是线性的,每个参与者可能忙于多个并发的通信。 例如,B可以
接收来自不是A的许多客户端的请求,并且/或者可以把请求转发到不是C的服务器,与此同
时C正在处理A的请求。
通信中任何非隧道成员都可能会采用一个内部缓存(internal cache)来处理请求。如果沿着链
的成员有请求已缓存的响应,请求/响应链就会大大缩短。下图阐明了一个最终请求响应链,假
定B拥有一个来自于O(通过C)的以前请求响应的缓存副本,并且此请求的响应并未被 UA
或A缓存。
请求链(request chain)---------->
UA-----v----------A-----v-----B-----C----O
<---------响应链 (response chain)
并不是所有的响应都能有效地缓存,一些请求可能含有修饰符(modifiers),这些修饰符对缓
存动作有特殊的要求。HTTP对缓存行为(behavior)和可缓存响应(cacheable responses)
的定义在第13章定义。
实际上,目前万维网上有多种被实践和部署的缓存和代理的体系结构和配置。这些系统包括节
省带宽的缓存代理(proxy cache)层次(hierarchies)系统,可以广播(broadcast)或多播
(multicast)缓存数据的系统,通过 CD-ROM发布缓存数据子集的机构,等等。HTTP系统
(http system)会被应用于宽带连接的企业局域网中的协作,并且可以被用于PDAs进行低耗
无线断续连接访问。HTTP1.1的宗旨是为了支持各种各样的已经部署的配置,同时引进一种协
议结构,让它满足可以建立高可靠性的web应用程序,即使不能达到这种要求,也至少可以可
靠的定位故障。
HTTP通信通常发生在TCP/IP连接上。 默认端口是TCP 80,不过其它端口也可以使用。但并不
排除HTTP协议会在其它协议之上被实现。HTTP仅仅期望的是一个可靠的传输(译注:HTTP
一般建立在传输层协议之上);所以任何提供这种保证的协议都可以被使用;协议传输数据单
元(transport data unit)与HTTP/1.1请求和响应的消息结构之间的映象已经超出了本规范的
范围。
大部分 HTTP/1.0 的实现都是对每个请求/响应交换(exchange)产生一个新的连接。而
HTTP/1.1中,一个连接可以用于一个或更多请求/响应交换,虽然连接可能会因为各种原因中
断
摘自 RFC2616