rfc1945-http1.0自译本-(2)

    技术2022-05-11  130

    1.  介绍(Introduction

     

    1.1  目的(Purpose

           HTTPHypertext Transfer Protocol)是应用级协议,它适应了分布式超媒体协作系统对灵活性及速度的要求。它是一个一般的、无状态的、基于对象的协议,通过对其请求方法(request methods)进行扩展,可以被用于多种用途,比如命名服务器(name server)及分布式对象管理系统。HTTP的一个特性是其数据表现类型允许系统的构建不再依赖于要传输的数据。

           HTTP自从1990年就在WWW上被广泛使用。该规范反映了“HTTP/1.0”的普通用法。

           该规范描述了在大多数HTTP/1.0客户机及服务器上看起来已经实现的特性。规范将被分成两个部分:HTTP特性的实现是本文档的主要内容,而其它不太通行的实现将被列在附录D中。

           实用的信息系统需要更多的功能,而不仅仅是数据的获取,包括搜索、前端更新及注解。HTTP允许使用开放的命令集来表示请求的目的,它使用基于URI[2]Uniform Resource Identifier),即统一资源标识的规则来定位(URL[4])或命名(URN[16])方法所用到的资源。HTTP使用与邮件(Internet Mail [7])和MIMEMultipurpose Internet Mail Extensions [5])相似的格式来传递消息。

           HTTP也作为用户代理、代理服务器/网关与其它Internet协议进行通讯的一般协议,这些协议是,SMTP [12], NNTP [11], FTP [14], Gopher [1], and WAIS [8]等。HTTP允许不同的应用可以进行基本的超媒体资源访问,并简化用户代理的实现。

     

    1.2  术语(Terminology

           本规范用了许多与参与方、对象及HTTP通讯相关的术语,如下:

    连接(connection

           两个应用程序以通讯为目的在传输层建立虚拟电路。

    消息(message

    HTTP通讯的基本单元,在连接中传输的结构化的、有顺序的字节(其含义在第四节中定义)。

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    Berners-Lee, et al           Informational                      [Page 4]

     

     

    请求(request

                  HTTP的请求消息(在第五节定义)

    回应(response

                  HTTP的回应消息(在第六节定义)

    资源(resource

                  网络上可以用URI来标识的数据对象或服务(见3.2节)

           实体(entity

    可被附在请求或回应消息中的特殊的表示法、数据资源的表示、服务资源的回应等,由实体标题(entity header)或实体主体(entity body)内容形式存在的元信息组成。

    客户端(client

           指以发出请求为目的而建立连接的应用程序。

    用户代理(user agent

    指初始化请求的客户端,如浏览器、编辑器、蜘蛛(web爬行机器人)或其它终端用户工具。

    服务器(server

                  指接受连接,并通过发送回应来响应服务请求的应用程序。

    原始服务器(origin server

                  存放资源或产生资源的服务器。

    代理(proxy

    同时扮演服务器及客户端角色的中间程序,用来为其它客户产生请求。请求经过变换,被传递到最终的目的服务器,在代理程序内部,请求或被处理,或被传递。代理必须在消息转发前对消息进行解释,而且如有必要还得重写消息。代理通常被用作经过防火墙的客户端出口,用以辅助处理用户代理所没实现的请求。

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    Berners-Lee, et al           Informational                      [Page 5]

     

     

    网关(gateway

    服务器之间的服务器。与代理不同,网关接受请求就好象它就是被请求资源所在的原始服务器,发出请求的客户端可能并没有意识到它在与网关进行通讯。网关是网络防火墙服务器端的门户。对非HTTP系统资源进行访问时,网关做为中间的协议翻译者。

    隧道(tunnel

    隧道就好象连接两端看不见的中继器。处于激活状态时,它虽然是由HTTP请求来初始化的,但它并不参与HTTP通讯。当需要中继连接的两端关闭后,隧道也自然终止。在入口有需求及中间程序无法或不该解释要中继的通讯时,通常要用到隧道技术。

    缓存(cache

                  指程序本地存储的回应消息和用来控制消息存储、重获、删除的子系统。

     

    缓存回应的目的是为减少请求回应时间,以及未来一段时间对网络带宽的消耗。任何客户端及服务端都可以包含缓存。服务器在以隧道方式工作时不能使用缓存。

                 

    任何指定的程序都有能力同时做为客户端和服务器。我们在使用这个概念时,不是看程序功能上是否能实现客户及服务器,而是看程序在特定连接时段上扮演何种角色(客户或服务器)。同样,任何服务器可以扮演原始服务器、代理、网关、隧道等角色,行为的切换取决于每次请求的内容。

     

    1.3  概述(Overall Operation

           HTTP协议是基于请求/回应机制的。客户端与服务器端建立连接后,以请求方法、URI、协议版本等方式向服务器端发出请求,该请求可跟随包含请求修饰符、客户信息、及可能的请求体(body)内容的MIME类型消息。

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    Berners-Lee, et al           Informational                      [Page 6]

     

     

           服务器端通过状态队列(status line)来回应,内容包括消息的协议版本、成功或错误代码,也跟随着包含服务器信息、实体元信息及实体内容的MIME类型消息。

           绝大多数HTTP通讯由用户代理进行初始化,并通过它来组装请求以获取存储在一些原始服务器上的资源。在最简单的情况下,通过用户代理(UA)与原始服务器(O)之间一个简单的连接(v)就可以完成。

     

              request chain ------------------------>

           UA -------------------v------------------- O

              <----------------------- response chain

     

           更复杂的情况是当请求/回应链之间存在一个或更多中间环节。总体看来,有三种中间环节:代理(proxy)、网关(gateway)、隧道(tunnel)。

    代理(proxy)是向前推送的代理人(agent),它以绝对形式接收URI请求,重写全部或部分消息,并将经过改写的请求继续向URI中指定的服务器处推送。

    网关是接收代理,它处于服务器层之上,在必要时候,它用服务器可识别的协议来传递请求。

    隧道不改变消息,它只是连接两端的中继点。在有中间层(如防火墙)或中间层无法解析消息内容的情况下,需要靠隧道技术来帮助通讯穿越中间层。

     

               request chain -------------------------------------->

           UA -----v----- A -----v----- B -----v----- C -----v----- O

               <------------------------------------- response chain

     

           上面的图形表示在用户代理和原始服务器之间有三个中间层(ABC)。由图可见,请求或回应消息在整个信息链上运行需要通过四个单独的连接,它与在此之前介绍的简单情况是有区别的,而且此区别是十分重要的。因为HTTP通讯选项可以设置成几种情况,如只与最近的非隧道邻居连接、只与信息链末端连接、或者可与链中全部环节连接等等。虽然上面的图是线性的,而实际上每个参与环节都在同时与多方进行通讯活动。例如,B在接受除A之外其它客户端请求的同时,向除C之外的其它服务器推送请求,在这个时刻,它可能接受到A的请求,并给予处理。

           参与通讯的任何一方如果没有以隧道方式进行工作,必须要借助内部缓存机制来处理请求,如果链上某个参与方碰巧缓存了某个请求的回应,那就相应于缩短了请求/回应链。下面的图例演示了当B缓存了从O经由C过来的回应信息,而UAA没缓存的情况:

     

     

     

     

     

     

     

     

     

     

     

    Berners-Lee, et al           Informational                      [Page 7]

     

     

              request chain ---------->

           UA -----v----- A -----v----- B - - - - - - C - - - - - - O

              <--------- response chain

     

           并非所有的回应都可以被缓存,某些请求所包含的修饰符中可能对缓存行为进行了特别指明。一些基于HTTP/1.0的应用使用了启发式的方法来描述哪些回应可被缓存,而哪些则不可以,但遗憾的是,这些规则并没有形成标准。

           Internet上,HTTP通讯往往基于TCP/IP的连接方式。缺省的端口是TCP 80[15]口,但也可以使用其它端口。并不排除基于Ineternet上的其它协议或网络协议的HTTP实现方式,HTTP只是假定传输是可靠的,因而任何能提供这种保证的协议都可以被使用。至于HTTP/1.0请求和回应在数据传输过程中的数据结构问题,不在本文讨论范围之内。

           实验室应用除外,当前的做法是客户端在每次请求之前建立连接,而服务器端在发送回应后关闭此连接。不管客户端还是服务器端都应注意处理突发的连接中断,因为双方都有可能因为用户操作、自动超时、程序失败等原因关闭与对方的连接。在这种情况下,不管请求处于什么样的状态,如单方或双方同时关闭连接,都会导致当前的请求被终止。

     

    1.4  HTTP and MIME

           HTTP/1.0使用了多种结构来定义MIME,详见RFC1521[5]。附录C描述了Internet承认的Internet介质类型与mail介质类型的不同工作方式,并给出二者区别的基本解释。

          

    2.  标志转换及通用语法(Notational Conventions and Generic Grammar

     

    2.1  补充反馈方式(Augmented BNF

           RFC822[7]很类似,本文对所有机制的说明都是以散文和补充反馈的方式来描述的。对于实现者来说,要想理解这些约定,必须对这些符号很熟悉。补充反馈方式(augmented BNF)包括下面的结构:

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    Berners-Lee, et al           Informational                      [Page 8]


    最新回复(0)