我将逐渐完成http/1.1协议的阅读,在此期间,为了加深记忆,会写成一个系列的文章,文中所述,以个人理解为主,以英文为准,尽量靠近原文档,原因是,下载了一个中文版的,读起来发现很别扭,感觉像是从Google翻译,直接翻译过来的,不知所云。
先强制性的翻译几章,熟悉之后,希望能够加快阅读速度,今天先进第一章。
part of Hypertext Transfer Protocol -- HTTP/1.1
RFC 2616 Fielding, et al.
- 介绍
1.1 文档的目的
HTTP,超文本传输协议,是为分布式的,联合的(合作式的),超媒体信息系统设计的。最开始是在1990年被WWW所用。他最开始是HTTP/0.9,传输的是未经处理的信息。HTTP/1.0将原始数据,改为传输mime格式的数据。这种格式的数据,包含了在请求/响应语法中的原始数据和修改信息。但是1.0的版本,在代理服务器和缓存方面却是一片空白。再加上,为了两个通信的应用程序能够明确各自的能力,自称http/1.0的协议,迫切的需要改进升级
为了更严格的实现其这些特征,这份协议包含了比1.0更严格的需求。
较之于简单的检索,实际应用中,需要更加强大的搜索,端到端的更新以及注释。http/1.1拥有一个能够知名请求目的的头信息。他需要由url,uri个urn指出的请求方法和信息的参考。(好别扭,实际上是说,他需要由URL、URN和URI指明请求的方法、资源等信息)。MIME格式的数据,本身是用于邮件的。HTTP/1.1协议还用于浏览器到代理,或者到各种互联网系统,包含支持SMTP [16], NNTP [13], FTP [18],等
1.2 阅读须知
关键字 "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119 [34].
如果must或者required未被满足,在实现的时候当然是不允许的,就是说,规定了必须的,在实现的时候,就必须满足。满足了必须,没有满足should的叫做有条件服从,而两者都满足的话,叫做无条件服从。
1.3 术语
连接: 两个程序间,一个稳定的环路
消息:在程序间传输的,基本的HTTP单元。
请求:第五章定义的请求信息
响应:第六章定义的响应信息
资源:由URI定义的在3.2章定义的信息
实体:真正传输的信息,包含了头信息和具体的实体信息
陈述:为内容协商准备的包含响应信息的实体(12章)
内容协商:为了达到最适的传输方式的一个机制
变体:资源可能有一种或多种表现形式,每一种表现形式叫做“变种”(??)。
用户代理: 浏览器、爬虫等。
服务器:接受用户请求,做出相应的服务器。
源服务器:存储着资源的服务器。
代理服务器:扮演者服务器和用户代理的角色,接受用户的请求,转发给服务器,再将服务器返回的内容,转发给用户。
网关:为多个服务器服务的一种服务器。与代理服务器不同的是,他穿着源服务器的外衣,欺骗者请求的服务器,让他们无法察觉。
隧道: vpn的意思。
cache:缓存
cacheable:当一个缓存能够存储一个请求的copy的时候,我们就说这个响应是cacheable的。
一手的:直接从源服务器过来的响应就叫一手的,但是又可能是通过了一个或是多个代理的。
明确的终止时间:当源服务器告之不再从缓存返回数据的时刻,就是明确的终止时间。
启发式的终止时间:在明确终止时间不可用时,被缓存安排的一个终止时间
周期:一个周期就是从发出请求到成功接收到请求的一个时间。
新鲜的生命时间:还在终止时间内进行响应的时候,我们说这个服务器还在新鲜的生命时间内。
新鲜的:还没有超过终止时间时候,发出的响应,可以称为是新鲜的。
腐烂的:对比新鲜的,当终止时间已经超过的时候,发出的响应的内容是腐烂的。
语义透明:当它的使用除了提高了性能既没有影响客户机,也没有影响源服务器的时候,我们就说这个高速缓存工作在语义透明的模式。当高速缓存工作在语义透明模式的时候,客户收到的应答和从源服务器收到的应答是相同的。
验证:一种验证机制(例如使用标签实体或是最后修改时间),用来验证缓存是不是真正的是一个实体的拷贝。
上/下游:上下游描述了信息的流动。
向内/向外:向内和向外是描述了信息的请求和应答路径。向内,就是移向源服务器,向外就是移向代理服务器。
HTTP协议是一种请求/应答协议。 与主机建立连接后,客户以请求方法,URI和协议版本的形式向服务器发送请求,继以类MIME信息,其中包括请求修改,客户信息和可能的正文内容。
服务器用包括消息协议版本和成功或错误代码的状态进行应答,继以包括服务器信息,实体维护信息和可能的实体内容的类MIME消息。HTTP和MIME之间的关系如附录19.4节所阐述。
大部分的HTTP通信由用户代理引发,由应用到一些原服务器上资源的请求构成。最简单的情形,可以经用户代理(UA)和原服务器(O)之间的单一连接(v)完成。请求链------------------------>用户代理(UA)-------------------单一连接(v)-------------------原服务器(O) <-----------------------应答链
当一个或一个以上的中介在请求/应答链中出现的时候,会出现更复杂的情形。常见的中介形式有三种:代理,网关和隧道。代理是一种转送工具,它接收绝对形式的URI请求,重写全部或部分消息,然后把重新格式化后的请求发送到URI确定的服务器上。网关是一种接收工具,它充当其他服务器的上层,必要时将请求翻译为下层服务器的协议。隧道不改变消息而充当两个连接之间的中继点;它用于通信需要穿过中介(如防火墙),甚至中介不能理解信息内容的时候。
请求链-------------------------------------->UA-----v-----A-----v-----B-----v-----C-----v-----O <-------------------------------------应答链
上图显示了用户代理和原服务器之间的三个中介(A,B和C)。游历整条链的请求或应答消息需通过四个独立的连接。这个特性很重要,因为某些HTTP通信选项只能应用于到最近的非隧道邻居,链的终点的连接,或者沿着链的所有连接。图表尽管是线性的,每部分可能都在忙于多路同时通信。例如,B可以接收来自不同于A的许多客户的请求,并且/或者转送到不同于C的服务器,与此同时,它还在处理A的请求。
任何非隧道的通信成员都可以使用内部的高速缓存来处理请求。高速缓存的作用是如果沿着链的一个成员对请求采用了高速缓冲的应答,请求/应答链就会大大缩短。以下图解作为结果产生的链,假定B拥有来自O(通过C)的一个从前应答的备份,请求尚未被UA或A缓存。
请求链---------->UA-----v----------A-----v-----B-----C----O <---------应答链
并不是所有的应答都能有效地缓存,一些请求可能含有修改量,对缓存动作有特殊的要求。缓存动作和缓存应答的HTTP要求将在第13节定义。
实际上,目前万维网上有多种结构和配置的高速缓存和代理被实验或使用。这些系统包括节省越洋带宽的全国代理层,广播或多点通信缓存接口, 通过CD-ROM分配子缓存数据的机构,等等。HTTP系统应用在宽频带连接的企业局域网中,通过PDAs的低耗无线连接和断续连接的访问。HTTP1.1的目标是支持各种各样的应用配置,引进协议结构满足那些需要较高可靠性,可以排除故障或至少指示故障的网络应用的要求。
HTTP通信在通常发生在TCP/IP连接上。默认端口是TCP 80,不过其它端口也可以使用。在互联网或其他网络上,这并不妨碍HTTP应用在其他协议的顶端。http仅仅期望可靠的传输;任何提供这种保证的协议都可以使用;协议传输数据单元的HTTP/1.1请求和应答结构的映象已经超出了本说明书的范围。
在http/1.0中,大部分的实现为每个请求/应答交换使用了新连接。而http/1.1中,一个连接可以用于一个或更多请求/应答交换,虽然连接可能会因为各种原因中断(见第8.1节)。