logo资料库

RFC1945(HTTP)中文版.pdf

第1页 / 共50页
第2页 / 共50页
第3页 / 共50页
第4页 / 共50页
第5页 / 共50页
第6页 / 共50页
第7页 / 共50页
第8页 / 共50页
资料共50页,剩余部分请下载后查看
1. 介绍(Introduction)
1.1 目的(Purpose)
1.2 术语(Terminology)
1.3 概述(Overall Operation)
1.4 HTTP and MIME
2. 标志转换及通用语法(Notational Conventions and Generic Grammar)
2.1 补充反馈方式(Augmented BNF)
2.2 基本规则(Basic Rules)
3. 协议参数(Protocol Parameters)
3.1 HTTP版本(HTTP Version)
3.2 统一资源标识(Uniform Resource Identifiers)
3.2.1 一般语法(General Syntax)
3.2.2 http URL
3.3 Date/Time 格式(Date/Time Formats)
3.4 字符集(Character Sets)
3.5 内容译码(Content Codings)
3.6 介质类型(Media Types)
3.6.1标准及文本缺省(Canonicalization and Text Defaults)
3.6.2 多部分类型(Multipart Types)
3.7 产品标识(Product Tokens)
4. HTTP 消息(HTTP Message)
4.1 消息类型(Message Types)
4.2 消息标题(Message Headers)
4.3 普通标题域(General Header Fields)
5. 请求(Request)
5.1 请求队列(Request-Line)
5.1.1 方法(Method)
5.1.2 请求URI(Request-URI)
5.2 请求标题域(Request Header Fields)
6. 回应(Response)
6.1 状态行(Status-Line)
6.1.1 状态代码和原因分析(Status Code and Reason Phrase)
6.2 回应标题域(Response Header Fields)
7. 实体(Entity)
7.1 实体标题域(Entity Header Fields)
7.2 实体主体(Entity Body)
7.2.1 类型(Type)
7.2.2 长度(Length)
8. 方法定义(Method Definitions)
8.1 GET
8.2 HEAD
8.3 POST
9. 状态代码定义(Status Code Definitions)
9.1 消息1xx(Informational 1xx)
9.2 成功2xx(Successful 2xx)
9.3 重定向(Redirection 3xx)
9.4 客户端错误(Client Error )4xx
9.5 服务器错误(Server Error )5xx
10. 标题域定义(Header Field Definitions)
10.1 允许(Allow)
10.2 授权(Authorization)
10.3 内容编码(Content-Encoding)
10.4 内容长度(Content-Length)
10.5 内容类型(Content-Type)
10.6 日期(Date)
10.7 过期(Expires)
10.8 来自(From)
10.9 从何时更改(If-Modified-Since)
10.10 最近更改(Last-Modified)
10.11 位置(Location)
10.12 注解(Pragma)
10.13 提交方(Referer)
10.14 服务器(Server)
10.15 用户代理(User-Agent)
10.16 WWW-授权(WWW-Authenticate)
11. 访问鉴别(Access Authentication)
11.1 基本授权方案(Basic Authentication Scheme)
12. 安全考虑(Security Considerations)
12.1 客户授权(Authentication of Clients)
12.2 安全方法(Safe Methods)
12.3 服务器日志信息的弊端(Abuse of Server Log Information)
12.4 敏感信息传输(Transfer of Sensitive Information)
12.5 基于文件及路径名的攻击(Attacks Based On File and Path Names)
13. 感谢(Acknowledgments)
14. 参考书目(References)
15. 作者地址(Authors' Addresses)
附录(Appendices)
A. Internet介质类型消息/http(Internet Media Type message/http)
B. 容错应用(Tolerant Applications)
C. 与MIME的关系(Relationship to MIME)
C.1 转换为规范形式(Conversion to Canonical Form)
C.2 日期格式转换(Conversion of Date Formats)
C.3 内容编码介绍(Introduction of Content-Encoding)
C.4 无内容传输编码(No Content-Transfer-Encoding)
C.5 多个主体的HTTP标题域(HTTP Header Fields in Multipart Body-Parts)
D. 附加特性(Additional Features)
D.1 附加请求方法(Additional Request Methods)
D.2 附加标题域定义(Additional Header Field Definitions)
组织:中国互动出版网(http://www.china-pub.com/) RFC 文档中文翻译计划(http://www.china-pub.com/compters/emook/aboutemook.htm) E-mail:ouyang@china-pub.com 译者:黄晓东(黄晓东 xdhuang@eyou.com) 译文发布时间:2001-7-14 版权:本中文翻译文档版权归中国互动出版网所有。可以用于非商业用途自由转载,但必须 保留本文档的翻译及版权信息。 Network Working Group T. Berners-Lee Request for Comments: 1945 MIT/LCS Category: Informational R. Fielding UC Irvine H. Frystyk MIT/LCS May 1996 超文本传输协议 -- HTTP/1.0 (Hyptertext Transfer Protocol – HTTP/1.0) 关于下段备忘(Status of This Memo) 本段文字为 Internet 团体提供信息,并没有以任何方式指定 Internet 标准。本段文字 没有分发限制。 IESG 提示(IESG Note): IESG 已在关注此协议,并期待该文档能尽快被标准跟踪文档所替代。 摘要(Abstract) HTTP(Hypertext Transfer Protocol)是应用级协议,它适应了分布式超媒体协作系统 对灵活性及速度的要求。它是一个一般的、无状态的、基于对象的协议,通过对其请求方法 (request methods)进行扩展,可以被用于多种用途,比如命名服务器(name server)及 分布式对象管理系统。HTTP 的一个特性是其数据表现类型允许系统的构建不再依赖于要传输 的数据。 HTTP 自从 1990 年就在 WWW 上被广泛使用。该规范反映了“HTTP/1.0”的普通用法。 1
1. 介绍(Introduction)..................................................................................................................4 1.1 目的(Purpose)...............................................................................................................4 1.2 术语(Terminology).......................................................................................................4 1.3 概述(Overall Operation)...............................................................................................6 1.4 HTTP and MIME ...............................................................................................................7 2. 标志转换及通用语法(Notational Conventions and Generic Grammar) ...............................8 2.1 补充反馈方式(Augmented BNF) ................................................................................8 2.2 基本规则(Basic Rules).................................................................................................9 3. 协议参数(Protocol Parameters) ...........................................................................................11 3.1 HTTP版本(HTTP Version).........................................................................................11 3.2 统一资源标识(Uniform Resource Identifiers)...........................................................11 3.2.1 一般语法(General Syntax)................................................................................12 3.2.2 http URL ..................................................................................................................12 3.3 Date/Time 格式(Date/Time Formats)........................................................................13 3.4 字符集(Character Sets) ..............................................................................................14 3.5 内容译码(Content Codings).......................................................................................14 3.6 介质类型(Media Types).............................................................................................15 3.6.1 标准及文本缺省(Canonicalization and Text Defaults)......................................15 3.6.2 多部分类型(Multipart Types) ...........................................................................16 3.7 产品标识(Product Tokens).........................................................................................16 4. HTTP 消息(HTTP Message)...............................................................................................17 4.1 消息类型(Message Types) .........................................................................................17 4.2 消息标题(Message Headers)......................................................................................17 4.3 普通标题域(General Header Fields)..........................................................................18 5. 请求(Request).........................................................................................................................19 5.1 请求队列(Request-Line) ............................................................................................19 5.1.1 方法(Method) ....................................................................................................19 5.1.2 请求URI(Request-URI).....................................................................................20 5.2 请求标题域(Request Header Fields)..........................................................................20 6. 回应(Response) ....................................................................................................................21 6.1 状态行(Status-Line) ...................................................................................................21 6.1.1 状态代码和原因分析(Status Code and Reason ..................................................21 6.2 回应标题域(Response Header Fields) .......................................................................22 7. 实体(Entity)..........................................................................................................................23 7.1 实体标题域(Entity Header Fields).............................................................................23 7.2 实体主体(Entity Body) ..............................................................................................23 7.2.1 类型(Type).........................................................................................................24 7.2.2 长度(Length) .....................................................................................................24 8. 方法定义(Method Definitions) ............................................................................................25 8.1 GET..................................................................................................................................25 8.2 HEAD ..............................................................................................................................25 8.3 POST................................................................................................................................25 9. 状态代码定义(Status Code Definitions)..............................................................................27 9.1 消息 1xx(Informational 1xx)......................................................................................27 2
9.2 成功 2xx(Successful 2xx)...........................................................................................27 9.3 重定向(Redirection 3xx)............................................................................................28 9.4 客户端错误(Client Error )4xx...................................................................................29 9.5 服务器错误(Server Error )5xx..................................................................................29 10. 标题域定义(Header Field Definitions)..............................................................................31 10.1 允许(Allow)..............................................................................................................31 10.2 授权(Authorization) .................................................................................................31 10.3 内容编码(Content-Encoding) ..................................................................................31 10.4 内容长度(Content-Length) ......................................................................................32 10.5 内容类型(Content-Type)..........................................................................................32 10.6 日期(Date)................................................................................................................32 10.7 过期(Expires) ...........................................................................................................33 10.8 来自(From)...............................................................................................................33 10.9 从何时更改(If-Modified-Since)...............................................................................34 10.10 最近更改(Last-Modified).......................................................................................34 10.11 位置(Location)........................................................................................................35 10.12 注解(Pragma) .........................................................................................................35 10.13 提交方(Referer)........................................................................................................35 10.14 服务器(Server) .......................................................................................................36 10.15 用户代理(User-Agent) ...........................................................................................36 10.16 WWW-授权(WWW-Authenticate) ........................................................................36 11. 访问鉴别(Access Authentication)......................................................................................37 11.1 基本授权方案(Basic Authentication Scheme).........................................................37 12. 安全考虑(Security Considerations) ...................................................................................39 12.1 客户授权(Authentication of Clients) .......................................................................39 12.2 安全方法(Safe Methods)..........................................................................................39 12.3 服务器日志信息的弊端(Abuse of Server Log ..........................................................39 12.4 敏感信息传输(Transfer of Sensitive Information) ..................................................39 12.5 基于文件及路径名的攻击(Attacks Based On File and Path Names).....................40 13. 感谢(Acknowledgments)....................................................................................................41 14. 参考书目(References)..........................................................................................................42 15. 作者地址(Authors' Addresses)...........................................................................................44 附录(Appendices)........................................................................................................................45 A. Internet介质类型消息/http(Internet Media Type...........................................................45 B. 容错应用(Tolerant Applications).................................................................................45 C. 与MIME的关系(Relationship to MIME)....................................................................45 C.1 转换为规范形式(Conversion to Canonical Form)............................................46 C.2 日期格式转换(Conversion of Date Formats)....................................................46 C.3 内容编码介绍(Introduction of Content-Encoding)...........................................46 C.4 无内容传输编码(No Content-Transfer-Encoding) ...........................................46 C.5 多个主体的HTTP标题域(HTTP Header Fields in..............................................47 D. 附加特性(Additional Features) ...................................................................................47 D.1 附加请求方法(Additional Request Methods)...................................................47 D.2 附加标题域定义(Additional Header Field Definitions) ...................................48 3
1. 介绍(Introduction) 1.1 目的(Purpose) HTTP 自从 1990 年就在 WWW 上被广泛使用。该规范反映了“HTTP/1.0”的普通用法。 HTTP(Hypertext Transfer Protocol)是应用级协议,它适应了分布式超媒体协作系统 对灵活性及速度的要求。它是一个一般的、无状态的、基于对象的协议,通过对其请求方法 (request methods)进行扩展,可以被用于多种用途,比如命名服务器(name server)及 分布式对象管理系统。HTTP 的一个特性是其数据表现类型允许系统的构建不再依赖于要传输 的数据。 该规范描述了在大多数 HTTP/1.0 客户机及服务器上看起来已经实现的特性。规范将被分 成两个部分:HTTP 特性的实现是本文档的主要内容,而其它不太通行的实现将被列在附录 D 中。 实用的信息系统需要更多的功能,而不仅仅是数据的获取,包括搜索、前端更新及注解。 HTTP 允许使用开放的命令集来表示请求的目的,它使用基于 URI[2](Uniform Resource Identifier),即统一资源标识的规则来定位(URL[4])或命名(URN[16])方法所用到的资 源。HTTP 使用与邮件(Internet Mail [7])和 MIME(Multipurpose 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 通讯的基本单元,在连接中传输的结构化的、有顺序的字节(其含义在第四节中定 义) 请求(request) 回应(response) 资源(resource) HTTP 的请求消息(在第五节定义) HTTP 的回应消息(在第六节定义) 网络上可以用 URI 来标识的数据对象或服务(见 3.2 节) 4
实体(entity) 可被附在请求或回应消息中的特殊的表示法、数据资源的表示、服务资源的回应等,由 实体标题(entity header)或实体主体(entity body)内容形式存在的元信息组成 客户端(client) 指以发出请求为目的而建立连接的应用程序 用户代理(user agent) 指初始化请求的客户端,如浏览器、编辑器、蜘蛛(web 爬行机器人)或其它终端用户 工具 服务器(server) 指接受连接,并通过发送回应来响应服务请求的应用程序 原始服务器(origin server) 存放资源或产生资源的服务器 代理(proxy) 同时扮演服务器及客户端角色的中间程序,用来为其它客户产生请求。请求经过变换, 被传递到最终的目的服务器,在代理程序内部,请求或被处理,或被传递。代理必须在消息 转发前对消息进行解释,而且如有必要还得重写消息。代理通常被用作经过防火墙的客户端 出口,用以辅助处理用户代理所没实现的请求 网关(gateway) 服务器之间的服务器。与代理不同,网关接受请求就好象它就是被请求资源所在的原始 服务器,发出请求的客户端可能并没有意识到它在与网关进行通讯。网关是网络防火墙服务 器端的门户。对非 HTTP 系统资源进行访问时,网关做为中间的协议翻译者 隧道(tunnel) 隧道就好象连接两端看不见的中继器。处于激活状态时,它虽然是由 HTTP 请求来初始化 的,但它并不参与 HTTP 通讯。当需要中继连接的两端关闭后,隧道也自然终止。在入口有需 求及中间程序无法或不该解释要中继的通讯时,通常要用到隧道技术 缓存(cache) 指程序本地存储的回应消息和用来控制消息存储、重获、删除的子系统。缓存回应的目 的是为减少请求回应时间,以及未来一段时间对网络带宽的消耗。任何客户端及服务端都可 以包含缓存。服务器在以隧道方式工作时不能使用缓存。 任何指定的程序都有能力同时做为客户端和服务器。我们在使用这个概念时,不是看程 序功能上是否能实现客户及服务器,而是看程序在特定连接时段上扮演何种角色(客户或服 务器)。同样,任何服务器可以扮演原始服务器、代理、网关、隧道等角色,行为的切换取决 于每次请求的内容。 5
1.3 概述(Overall Operation) HTTP 协议是基于请求/回应机制的。客户端与服务器端建立连接后,以请求方法、URI、 协议版本等方式向服务器端发出请求,该请求可跟随包含请求修饰符、客户信息、及可能的 请求体(body)内容的 MIME 类型消息。 服务器端通过状态队列(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 上面的图形表示在用户代理和原始服务器之间有三个中间层(A,B 和 C)。由图可见,请 求或回应消息在整个信息链上运行需要通过四个单独的连接,它与在此之前介绍的简单情况 是有区别的,而且此区别是十分重要的。因为 HTTP 通讯选项可以设置成几种情况,如只与最 近的非隧道邻居连接、只与信息链末端连接、或者可与链中全部环节连接等等。虽然上面的 图是线性的,而实际上每个参与环节都在同时与多方进行通讯活动。例如,B 在接受除 A 之 外其它客户端请求的同时,向除 C 之外的其它服务器推送请求,在这个时刻,它可能接受到 A 的请求,并给予处理。 参与通讯的任何一方如果没有以隧道方式进行工作,必须要借助内部缓存机制来处理请 求,如果链上某个参与方碰巧缓存了某个请求的回应,那就相应于缩短了请求/回应链。下面 的图例演示了当 B 缓存了从 O 经由 C 过来的回应信息,而 UA 和 A 没缓存的情况: 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 请求和回应在数据传输过程中的数据结构问题,不在本文讨论范围之内。 实验室应用除外,当前的做法是客户端在每次请求之前建立连接,而服务器端在发送回 6
应后关闭此连接。不管客户端还是服务器端都应注意处理突发的连接中断,因为双方都有可 能因为用户操作、自动超时、程序失败等原因关闭与对方的连接。在这种情况下,不管请求 处于什么样的状态,如单方或双方同时关闭连接,都会导致当前的请求被终止。 1.4 HTTP and MIME HTTP/1.0 使用了多种结构来定义 MIME,详见 RFC1521[5]。附录 C 描述了 Internet 承认 的 Internet 介质类型与 mail 介质类型的不同工作方式,并给出二者区别的基本解释。 7
2. 标 志 转 换 及 通 用 语 法 ( Notational Conventions and Generic Grammar) 2.1 补充反馈方式(Augmented BNF) 与 RFC822[7]很类似,本文对所有机制的说明都是以散文和补充反馈的方式来描述的。 对于实现者来说,要想理解这些约定,必须对这些符号很熟悉。补充反馈方式(augmented BNF) 包括下面的结构: 要解释的名词=名词解释(name = definition) 规则的名字(name)就是它本身(不带任何尖括号,“<”,“>”),后面跟个等号=,然后 就是该规则的定义。如果规则需要用多个行来描述,利用空格进行缩进格式排版。某些基本 的规则使用大写,如 SP, LWS, HT, CRLF, DIGIT, ALPHA,等等。定义中还可以使用尖括号来 帮助理解规则名的使用。 字面意思("literal") 文字的字面意思放在引号中间,除非特别指定,该段文字是大小写敏感的。 规则 1|规则 2(rule1 | rule2) “|”表示其分隔的元素是可选的,比如,“是|否”要选择‘是’或‘否’。 (规则 1 规则 2)((rule1 rule2)) 在圆括号中的元素表明必选其一。如(元素 1(元素 2|元素 3)元素 4)可表明两种意 思,即“元素 1 元素 2 元素 4”和“元素 1 元素 3 元素 4” *规则(*rule) 在元素前加星号“*”表示循环,其完整形式是“*元素”,表明元素最少产生 次,最多次。缺省值是 0 到无限,例如,“1*元素”意思是至少有一个,而“1*2 元素” 表明允许有 1 个或 2 个。 [规则]([rule]) 方括号内是可选元素。如“[元素 1 元素 2]”与“*1(元素 1 元素 2)”是一回事。 N 规则(N rule) 表明循环的次数:“(元素)”就是“*(元素)”,也就是精确指出取值。因 而,2DIGIT 就是 2 位数字, 3ALPHA 就是由三个字母组成字符串。 #规则(#rule) “#”与“*”类似,用于定义元素列表。 完整形式是“#元素”表示至少有个至多有个元素,中间用“,”或任意数 8
分享到:
收藏