??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
]]>
]]>
]]>
]]>
下面q些规则描述了基本的解析W号Q诏I于整篇规范中?SPAN lang=EN-US>US-ASCII字符集在ANSI X3.4-1986[21]中被定义?o:p>
OCTET = <any 8-bit sequence of data>
CHAR = <any US-ASCII character (octets 0 - 127)>
UPALPHA = <any US-ASCII uppercase letter "A".."Z">
LOALPHA = <any US-ASCII lowercase letter "a".."z">
ALPHA = UPALPHA | LOALPHA
DIGIT = <any US-ASCII digit "0".."9">
CTL = <any US-ASCII control character
(octets 0 - 31) and
CR = <US-ASCII CR, carriage return (13)>
LF = <US-ASCII LF, linefeed (10)>
SP = <US-ASCII SP, space (32)>
HT = <US-ASCII HT, horizontal-tab (9)>
<"> = <US-ASCII double-quote mark (34)>
HTTP/1? 定义了回车换行作为所有协议元素行l束标志Qentity-body除外。在entity-body的行l束标志和它相关联的数据cd紧密联系Qdes3.7?o:p>
CRLF = CR LF
HTTP/1?头区的值可以多行,但需要接l行以一个空格或水^TAB开头。所有的LWSQ可以{弯,都和SP有相同的语义。一?可以在解释域值和转向message downstream时代替Q何的LWS用一个单独的SP?o:p>
LWS =[CRLF]1*QSP|HTQ?o:p>
TEXT只被用来描述那些不会被message 解析器解析的域内容域倹{只要按RFC2047[14]~码Ӟ*TEXT可以包含除ISO-8859-1[22]在外的所有字W?o:p>
TEXT = <any OCTET except CTLs,but including LWS>
一?SPAN lang=EN-US>CRLF在TEXT定义中只作ؓ头区的l的一部分。多行的LWS会在其所在TEXT被解释前被一个单独的SP取代?o:p>
十六q制数字字符在几个协议元素中被用?SPAN lang=EN-US>
HEX = "A" | "B" | "C" | "D" | "E" | "F"
| "a" | "b" | "c" | "d" | "e" | "f" | DIGIT
许多HTTP/1?头区值由LWS或一些特D字W分隔的字符l成。而在参数|des3.6Q中q些Ҏ的字W必d一对引号中被用?o:p>
token = 1*<any CHAR except CTLs or separators>
separators = "(" | ")" | "<" | ">" | "@"
| "," | ";" | ":" | "\" | <">
| "/" | "[" | "]" | "?" | "="
| "{" | "}" | SP | HT
注释可以包含在一?SPAN lang=EN-US>HTTP头区内,但是要在Q)内。而且只能在注释区内。在其他区,会被认ؓ是区值的一部分?o:p>
comment = "(" *( ctext | quoted-pair | comment ) ")"
ctext = <any TEXT excluding "(" and ")">
一?SPAN lang=EN-US>text字符串如果被双引号包着Q那会被认ؓ是一个单独的词?o:p>
quoted-string = ( <"> *(qdtext | quoted-pair ) <"> )
qdtext = <any TEXT except <">>
斜划U可以被作ؓ单字W的转换机制Q但是必要在引号内包着Qƈ且是在注释区?SPAN lang=EN-US>
quoted-pair = "\" CHAR
HTTP是一个ؓ分布式的协作的超媒体的信息系l而徏立的应用层上的协议。自?990q就被www采用。第一个版本,HTTP/0?Q是一个简单的跨INTERNET传输原始数据的协议。HTTP/1.0Q在RFC1945[6]描述Q,允许信息以类似MIME形式存在Q包含关于传输数据的描述元数据和一些关于REQUEST/RESPONSE语义描述W?/FONT>Q?SPAN style="COLOR: black">。但是,HTTP/1?q没有考虑到多U代理,~存Q持久连接的需要,或着虚拟L。另外,来多的HTTP/1?的不兼容实现也得一个新版本的出现变的必要(需要一个统一版本来协议双方定彼此实现了哪些功能)?o:p>
q䆾规范定义?SPAN lang=EN-US>HTTP/1?协议。这份协议比HTTP/1?包含了更严格的限Ӟ以此来保证实现的可靠性,兼容性?o:p>
实际的信息系l要求更多功能而不仅仅是简单的取数据,包括查询,前台更新Q注解?SPAN lang=EN-US>HTTP允许一个开攄Ҏ和头的集合来表示REQUEST的确切要求(对基于URI,URL,URN指定的资源的要求Q。而传递的信息则采用类似MIME信息格式?o:p>
HTTP也被用来做客L和处理其他信息系l(SMTPQNNTPQFTPQGOPHTERQWAISQ。的代理/|关的交。这PHTTP允许各种各样的应用访问基本的多媒体资源?o:p>
1. 2要求
在这个文档里出现的关键词“MUST? “MUST NOT? “REQUIRED? “SHALL? “SHALL NOT? “SHOULD? “SHOULD NOT? “RECOMMENDED? “MAY? and “OPTIONAL”按RFC2119[34]描述的那栯释?o:p>
如果?SPAN lang=EN-US>1个或多个MUSTQREQUIRED水^的要求未满Q那么这个实现就是不兼容的。如果满x有的MUSTQREQUIREDQSHOULD水^的要求,那么q个实现“unconditionallycompliant?
满所?SPAN lang=EN-US>MUST但是不是所有SHOULD是“conditionally compliant”?o:p>
1Q?术语
q个规范用了许多术语来描q在HTTP交流中的参与者和对象?o:p>
Connection
?SPAN lang=EN-US>2个要交流的程序间建立的虚拟传输层信\?o:p>
Message
基本?SPAN lang=EN-US>HTTP交流单元。由l构化的字节构成,其结构符合SECTION4的词法定义;通过CONNECTION传递?o:p>
Request
一?SPAN lang=EN-US>HTTP request messageQSECTION 5 DES?o:p>
Response
一?SPAN lang=EN-US>HTTP response messageQSECTION 6 DES?o:p>
Resource
一个能够被URI标识的网l数据对象或服务QSECTION3? DES。资源可以有多种表示Qƈ且可以在其他斚w有所变化?o:p>
Entity
被一?SPAN lang=EN-US>request或response作ؓ有效负荷传输的信息。由头区的元数据信息和体区的数据区组成,SECTION7 des?o:p>
Representation
在一?SPAN lang=EN-US>response里的属于content negotiation的entityQSECTION12 des。在1个response中可以存在多个representation?o:p>
Content negotiation
一U机Ӟ用来选择合适的representation来服务一个requestQSECTION12 des?o:p>
Variant
一个资源可以在Ml定时刻拥有多个representation。每一个被命名为variant?o:p>
Client
一个用来徏立连接发?SPAN lang=EN-US>request的程序?o:p>
User agent
发送一?SPAN lang=EN-US>request的client。最常见的是览?o:p>
Server
接受q接用来?SPAN lang=EN-US>request服务q且发送回response的应用程序。Q何一个程序都可以既做serverQ又做client,q里的概忉|的就是在一ơconnection中的角色Q而不是一般意义下的程序的能力。同PMserver可以作ؓ一个origin serverQproxy,gateway,或者tunnelQ基于请求的性质做出不同的行为?o:p>
Orgin server
一个指定的资源的所在地或被创徏地的server?o:p>
Proxy
一个中间程序,既做server又做client(做client是ؓ了其他的的clients)。请求被内部服务或者被传递(有可能做下翻译)到其他server。一个proxy必须实现规范关于client和server的双重要求。一?/SPAN>“transparent proxy“是一个不对request和response做超代理鉴定要求处理的proxyQ相反就是做。除了“transparent proxy”或者“non-transparent proxy”被明确指定的特D行为外QHTTP proxy 的要求也适用于这两种proxy?o:p>
Gateway
一个用来ؓ其他server服务的server。不象一个proxyQ一个gateway接受h好象他是请求resource的origin server一P而请求client可能Ҏ׃知道l过了一个gateway?o:p>
Tunnel
一个中间程序,在两?SPAN lang=EN-US>conncetion之间做一个透明传递。一旦激z,它将不被认ؓ是HTTP交流的一部分Q虽然它可能是被HTTPh初始化的。当两个connection都关闭后它也消失了?o:p>
Cache
E序?SPAN lang=EN-US>reponse message的局部存储,包括控制Q查询,删除存储的子pȝ。一个cache存储cache response用来应对未来的同LhQ达到降低reponse旉和带宽消耗的目的。Q何client和server都可以包括一个cacheQ但是一个cache不能被一个tunnel使用?o:p>
Cacheable
如果一?SPAN lang=EN-US>cache可以存储response message的备份来应对以后的请求,那么q个response是cacheable。SECTION13 des。即使一个response是CacheableQ也有另外的限制来决定是否一个cache可以用一个cache拯来应对请求?o:p>
First-hand
一?SPAN lang=EN-US>response是从origin server或经q了几个proxyq来的那么就是first-hand。如果它的有效性被origin server校验q那它也是first-hand?o:p>
Explicit expiration time
Origin server定的关于一个entity不应再由一个cache未经q一步校验就q回的时间?o:p>
Herristic expiration time
如果一?SPAN lang=EN-US>Explicit expiration time不可用,那么q个旉被缓存?o:p>
age
一?SPAN lang=EN-US>response的age是自从它被发送或成功地被origin server校验后的旉D?o:p>
freshness lifetime
一?SPAN lang=EN-US>response自从产生到expiration time之间的时间长?o:p>
fresh
一?SPAN lang=EN-US>response是fresh的,如果它的ageq没有超q它的freshness lifetime?o:p>
Stale
一?SPAN lang=EN-US>response是stale的,如果它的age过了它的freshness lifetime?o:p>
Semantically transparent
一?SPAN lang=EN-US>cache一一USemantically transparent的方式工作,对于特定的一个responseQ这时它的用既没有影响request client也没有媄响origin serverQ和没经qcache一PQ但是却提高了性能?o:p>
Validator
一个协议元素被用来扑և一?SPAN lang=EN-US>cache entity 是不是等同于一个entity?o:p>
Upstream/downstream
描述了一?SPAN lang=EN-US>message的流动:所有的message从upstream向downstream?o:p>
Inbound/outbound
是指message的request和response路径。前者只向origin serverQ后者指向user agent?o:p>
1.4整体q行框架
HTTP协议是一个request/response协议。一个client发送一个requestl一个serverQ由一个request method,uri,协议版本Q紧跟着mimecM的信息(包含request描述W,client的信息,和与一个server传递数据可能的定wQ。Server回以一个状态行Q包括message的协议版本,一个成功或p|的代码)Q紧跟一个MIMEcM的messageQ包括server信息Qentity的元数据Q可能的entity-body定w。HTTP和MIME的关pappendix19.4?o:p>
大多数的HTTPq接被一个user agent发vQ请求某些origin server上的资源。在单情况,可以如图所C:
request chain ------------------------>
UA -------------------v------------------- O
<----------------------- response chain
一个更加复杂点的情况:有多个中间体介于request/response chain。有3个普遍的中间体Ş式:proxyQgatewayQtunnel。一个proxy是一个{送站Q接受一个request,更改全部或部分messageQ根据uri重新发request。一个gateway是一个接受站Q就象居于其他一些server之上的server一P如果必要Q会把requeset传给它下面的server。一个tunnel是一个接力点Q连?个连接而不改变MmessageQ可以被用来处理防火墙?o:p>
request chain -------------------------------------->
UA -----v----- A -----v----- B -----v----- C -----v----- O
<------------------------------------- response chain
上面的图展示?SPAN lang=EN-US>3个中间体abc在user agent和origin server之间。一个request或response messageI越整个N要通过4个独立的q接。这个区别是很重要的Q因Z?HTTP通讯选项只能加到最q的Q非tunneldQ只能到chain的末端或所有连接。虽然图是画地直U,但是每一个参与者可能同时处理多个通讯。比如,B在处理A的request 的同时可能正在接受其他clients发过来的requestQ而把它们转向非c的server?o:p>
M参与通讯的只要不?SPAN lang=EN-US>tunnel都可以用一个内部cache来处理request。这会羃短通讯铑֦果有一Ҏ对该request的cached reponse。下面展CZl果铑֦果B有一个从O的cache copyQ而UAQ或A没有?o:p>
request chain ---------->
UA -----v----- A -----v----- B - - - - - - C - - - - - - O
<--------- response chain
q不是所有的response的缓存都是有用的Q一些request可能会包含关于缓存要求的描述W。HTTP对于~存的方式控制和responseQdes13?o:p>
事实上,~存和代理的构架现在正在被整?SPAN lang=EN-US>WWW实验和部|Ӏ这些系l包括国家的代理缓存来存储洋的带宽,pȝq播或多Ҏ送cached entriesQ组l那些零散的~存到CD-ROM{等。HTTPpȝ也在公司内网的宽带连接和PDA的低能耗无U断l连接系l中被用。HTTP1?的目标是支持在协议诞生期间已l部|的各种配置Q得WEB应用能够辑ֈ高可靠性,臛_是在p|后有可靠的提C?o:p>
HTTP通讯通常是跨TCP/IPq接地发生。默认端口是TCP80[19]Q但是其他的端口也可以被使用。这׃HTTP可以作ؓINTERNET上其他协议的上层协议Q或其他|络的协议。HTTP只要求一个可靠连接,M能提供这L保证的协议都可以被用;把HTTP/1?的request和response的结构{化成正在被讨论的协议的数据单位超Z本规范的范围?o:p>
?SPAN lang=EN-US>HTTP/1?Q大多数实现使用一个新的连接应对request/response交换。在HTTP/1?中,一个连接可以被多个request/response交流使用Q虽然连接可以因为多个原因被关闭?o:p>