| HTTP 协议 | |
官方RFC2616文档: http://www.w3.org/Protocols/rfc2616/rfc2616.html Network Working Group(网络工作组) R. Fielding 超文本传输协议-HTTP/1.1
版权声明 摘要 超文本传输协议(HTTP)是一种为分布式,合作式,多媒体信息系统服务,面向 目录(略) 1 引论 1.1 目的 超文本传输协议(HTTP)是一种为分布式,合作式,多媒体信息系统服务,面向应用层的 这里规定的协议叫做“HTTP/1.1".这个协议与HTTP/1.0相比,要求更为严格,以确保各项功能得到可靠实现。 实际的信息系统除了简单的检索外,要求更多的功能性(functionality),包括查找(search),前端更新(front-end update)和注解(annotation)。HTTP允许可扩充的方法集和报头集以指示请求的目的[47]。它是建立在统一资源标识符(URI)[3]提供的地址(URL)[4]和名字(URN)上[20],以指出方法应用于哪个资源的。消息以类似于一种叫做多用途网络邮件扩展(MIME)[7] 的互联网邮件的格式传送。 HTTP也是用于用户代理之间及代理/网关到其他网络系统的通用通信协议,这样的网络系统可能由SMTP[16],NNTP[13],FTP[18],Gopher[2]和WAIS[10]协议支持。这样,HTTP允许不同的应用程序对资源进行基本的超媒体访问。 1.2 要求 本文的关键词"MUST", "MUST NOT", "REQUIRED", "SHALL","SHALL NOT","SHOULD", 一项进程如果不能满足协议提供的一个或多个MUST或REQUIRED等级的要求,是不符合要求的。一项进程如果满足所有MUST或REQUIRED等级以及所有SHOULD等级的要求,则被称为“绝对符合”(unconditionally compliant)的;若满足所有MUST等级的要求但不能满足所有SHOULD等级的要求则被称为“部分符合”(conditionally compliant)的。 1.3 术语 本说明用到了若干术语,以表示HTTP通信中各参与者和对象扮演的不同角色。 连接(Connection) 消息(Message) 资源(Resource) 实体(Entity) 表示方法(Representation) 变量(Variant) 客户机(Client) 用户代理(User agent) 服务器(Server) 原服务器(Origin server) 网关(gateway) 高速缓存(Cache) 可缓存(Cacheable) 直接(first-hand) 明确终止时间(explicit expiration time) 探索终止时间(heuristic expiration time) 年龄(Age) 保鲜寿命(Freshness lifetime) 保鲜(Fresh) 陈旧(Stale) 语义透明(semantically transparent) 有效性判别器(Validator) 上游/下游(upstream/downstream) 向内/向外(inbound/outbound) 1。4 总体操作 HTTP协议是一种请求/应答协议。 与主机建立连接后,客户以请求方法,URI和协议版本的形式向服务器发送请求,继以类MIME信息,其中包括请求修改,客户信息和可能的正文内容。 大部分的HTTP通信由用户代理引发,由应用到一些原服务器上资源的请求构成。最简单的情形,可以经用户代理(UA)和原服务器(O)之间的单一连接(v)完成。请求链------------------------>用户代理(UA)-------------------单一连接(v)-------------------原服务器(O) <-----------------------应答链 当一个或一个以上的中介在请求/应答链中出现的时候,会出现更复杂的情形。常见的中介形式有三种:代理,网关和隧道。代理是一种转送工具,它接收绝对形式的URI请求,重写全部或部分消息,然后把重新格式化后的请求发送到URI确定的服务器上。网关是一种接收工具,它充当其他服务器的上层,必要时将请求翻译为下层服务器的协议。隧道不改变消息而充当两个连接之间的中继点;它用于通信需要穿过中介(如防火墙),甚至中介不能理解信息内容的时候。
并不是所有的应答都能有效地缓存,一些请求可能含有修改量,对缓存动作有特殊的要求。缓存动作和缓存应答的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节)。 2 符号惯例和一般语法 2.1 扩充BNF 本文档规定的所有机制都用两种方法描述:散文体(prose)和类似于RFC 822的扩充Backus-Naur Form(BNF)。要理解本说明书,使用者需熟悉符号表示法。扩充BNF包括下列结构: 名字=定义 “文字” 规则1 | 规则2 (规则1 规则2) *规则
N 规则 #规则 ;注释 隐含 *LWS 2.2基本规则 下面的规则描述了基本的解析结构,贯穿于本说明书的全文。US-ASCII(美国信息交换标准码)字符规定是由ANSI X3.4-1986[21]定义的。 OCTET = <任意八比特的数据序列>
CRLF = CR LF 如果延长线由空格或水平制表开始,HTTP/1.1 的报头域值可以折叠到到复合线上。所有的 LWS = [CRLF] 1*( SP | HT ) 文本规则仅仅适用于描述域的内容和不会被消息语法分析程序解释的值。*TEST的字可以 TEXT = <除CTLs以外的任意OCTET,但包括LWS> 一个CRLF仅仅在作为报头域延续的一部分时才在TEXT定义里允许使用。 十六进制数字字符用在数个协议元素里。 HEX = "A" | "B" | "C" | "D" | "E" | "F"
token (标记) = 1*<除CTLs与分割符以外的任意 CHAR > 用圆括号括起来的注释可以包含在一些HTTP报头域里。只有作为域值定义的一部分时注释才是允许的。在其他域里,圆括号视作域值的一部分。 comment (注释)= "(" *( ctext | quoted-pair | comment ) ")" 一个文本字符若在双引号里,则当作一个字。 quoted-string = ( <"> *(qdtext | quoted-pair ) <"> ) 反斜线("\")可以用作单一字符引用结构,但仅在引用字符串或注释里。 quoted-pair = "\" CHAR
3.1 HTTP版本 HTTP使用"<主要>.<次要>"的编号方案表示协议版本。协议的版本方针是希望允许发送者表示消息的格式和性能以便理解更深一层的HTTP通信,而不仅仅是当前通信获得的特征。消息构件的增加不影响通信动作,或仅仅增加了扩展域值,版本号并没有因此变化。协议的改变增加了一些特征,没有改变一般的消息解析规则,但是增加了消息的语义或者暗含了发送者新增的性能,这时<次要>数字便要增大。当协议的消息格式改变时,<主要>数字增大。 HTTP消息的版本在消息的第一行HTTP-版本域里表示。 HTTP-Version = "HTTP" "/" 1*DIGIT "." 1*DIGIT 注意主要和次要数字必须看作是两个分离的整数,二者都可以增加到比单位数还大。这样,HTTP/2.4的版本比HTTP/2.3低,依次HTTP/2.3的版本比HTTP/12.3低。首位的零必定被接收者忽视,一定不要发送。 一个发送包含HTTP版本"HTTP/1.1"的请求或应答消息的应用,必须至少有条件的服从本说明书。至少有条件服从本说明书的应用应该在消息里使用"HTTP/1.1"的HTTP-版本,任何与 HTTP/1.0不兼容的消息则必须这样做。关于何时发送特殊的HTTP-版本值,更多资料请参看 一项应用的HTTP版本是应用至少有条件服从的最高HTTP版本. 代理和网关转送的消息的协议版本与应用版本不同时,需要小心。既然协议版本表示发送者的协议性能,代理/网关一定不能发送标示版本高于它本身的实际版本的消息。如果收到更高版本的请求,代理/网关必须降低请求的版本,或者发出出错应答,或者切换到隧道动作。 由于自RFC 2068[33]发布后发现的HTTP/1.0代理协同工作问题,高速缓存代理必须,网关可以,隧道必须不将请求提升到它们支持的最高版本。代理/网关的应答的主要版本号必须同请求相同。 注:HTTP版本的转换可能会包含相关版本必需或禁止的头域修改。 3.2 统一资源标识符(URI) URIs的许多名字已为人所知:WWW地址,通用文件标识符,通用资源标识符[3],以及最后统一资源定位器(URL)[4]和统一资源名称(URN)[20]的结合。只要与HTTP相关,统一资源定位器只是格式化的字符串,它通过名称,地址,或任何别的特征确定了资源的位置。
HTTP协议不对URI的长度作事先的限制.服务器必须能够处理它们服务的任何资源的URI,并且应该能够处理无限长度的URI,如果它们提供可以产生这种URI的基于GET的形式. 注:服务器在依赖长于255字节的URI时应谨慎,因为一些旧的客户或代理实现可能不支持这些长度. 3.2.2 http URL http方案通过HTTP协议定出网络资源的位置.本节定义了这种方案-http URL特殊的语法和语义. 如果端口为空或未给出,就假定为80.语义即:已识别的资源放在服务器上,在那台主机的那个端口上监听TCP连接,对资源的请求的URI为绝对路径(5.1.2节). 无论什么可能的时候,URL里使用IP地址都是应该避免的(参看RFC 1900 [24]).如果绝对地址没有出现在URL里,它用作对资源的请求的URI时必须作为"/"给出.如果代理收到一个不是充分资格域名的主机名,一定不能改变主机名.
当比较两个URI是否匹配时,客户应该对整个URI进行区分大小写,以八字节为单元的比较.以下情况例外: -一个为空或未给定的端口等同于那个URI索引里的默认端口; -主机名的比较必须是不区分大小写的; -方案名的比较必须是不区分大小写的; -一个空绝对路径等同于绝对路径"/". Characters other than those in the "reserved" and "unsafe" sets are equivalent to their ""%" HEX HEX" encoding. 例如,以下三个URI是等同的: http://abc.com:80/~smith/home.html
3.3.1 完整日期 历史上的HTTP应用一直允许三种不同的表示日期/时间印记的格式: Sun, 06 Nov 1994 08:49:37 GMT ; RFC 822, updated by RFC 1123
注:鼓励日期值的接收者在接受可能由非HTTP应用发来的日期值时要坚定,这种非HTTP应用有时是通过代理/网关到SMTP或NNTP检索或张贴消息. 所有的HTTP日期/时间印记都必须毫无例外的以格林威治平均时间(GMT)表示.为了HTTP,GMT完全等同于UTC(协调世界时间).这在前两种形式里用三个字母的时区缩写-GMT的蕴含来表示,并且读取ASC时间格式时必须先被假定.HTTP日期区分大小写,除了在语法中作为SP特别包括的LWS外,一定不能包括额外的LWS. 注意:HTTP对日期/时间印记格式的请求仅仅应用在协议流里.客户和服务器不必为了用户简报,请求记录及其他而使用这些格式. 3.3.2 Delta秒 一些HTTP头域收到消息后,允许以十进制整数秒表示的时间值. 3.4 字符集 HTTP使用的关于术语"字符集"的定义和MIME中所描述的一样. 本文档中的术语"字符集"指一种用一个或更多表格将一个八字节序列转换成一个字符序列的方法.注意另一方向的无条件转换是不需要的,在这种转换里,并不是所有的字符都能在一个给定字符集里得到,并且字符集可能提供多个八进制序列表示一个特定字符.这个定义将允许各种字符编码方式,从简单的单表格映射如US-ASCII到复杂的表格交换方法如ISO-2022的技术里所使用的.然而,与MIME字符集名字相关联的定义必须充分说明从八字节变换到字符所实现的映射.特别的,使用外部轮廓信息来决定精确映射是不允许的. 注:这里使用的术语"字符集"更一般的被称作一种"字符编码".不过既然HTTP和MIME使用同样的注册表,共用术语是很重要的. HTTP字符集用不区分大小写的标记表示.完全标记集合由IANA字符集注册表[19]定义. 尽管HTTP允许用任意标记作为字符集的值,任何在IANA字符集注册表里有预先确定值的标记必须表示该注册表定义的字符集.对那些IANA定义的字符集,应用应该限制使用字符集. 实现者应该注意IETF字符集的要求[38][41]. 3.4.1 失踪字符集 一些HTTP/1.0软件将没有字符集参数的内容类型头错误的理解为"接收者应该猜猜."若发送者希望避免这种情况,可以包含一个字符集参数,即使字符集是ISO-8859-1;当知道不会使接收者混淆时,也应该这样做. 不幸的是,一些旧的HTTP/1.0不能适当处理详细的字符集参数.HTTP/1.1接收者必须重视发送者提供的字符集标注;当最初显示文档时,那些提供"猜"字符集服务的用户代理必须使用内容类型域中的字符集,如果它们支持那个字符集,而不是接收者的首选项。参看3.7.1节。 3.5 内容编码 内容编码值表示一种已经或可以应用于实体的编码变换。内容编码主要用来允许文档压缩,换句话说,有效的变换而不损失它的基本媒体类型的特性,也不丢失信息。经常地,实体以编码形式储存,直接传送,只能由接收者译码. content-coding = token 所有内容编码值都是不区分大小写的.HTTP/1.1在接收译码(14.3节)和内容译码(14.11节)的头域里使用内容编码值.尽管该值描述了内容编码,更重要的是它指出需要什么编码机制 互联网赋值机构(IANA)充当内容编码值标记的注册处.最初,注册表包含下列标记: gzip(压缩程序) compress(压缩) Identity(标识) 新的内容译码值的标记应该注册;为了允许客户和服务器间的互用性,内容译码运算的规范需要实现一个可被公开利用并能独立实现的新值,并且与这节中内容译码定义的目的相一致. 3.6 传输编码 传输编码值被用来表示一个已经,能够,或可能需要应用于一个实体的编码转化,为的是能够确保通过网络安全传输.这不同于内容译码,传输译码是消息的特性而不是原始实体的特性. 参数采用属性/值对的形式. 参数 = 属性 "=" 值 所有传输译码值是不直观的.HTTP/1.1在TE头域(14.39节)和传输译码头域(14.41节)运用传输译码. 无论何时一个传输译码都被应用于一个消息体,传输译码的设置必须包括"大块",除非消息被结束连接停止.当"大块"传输译码被应用时,它必须是应用于消息体的最后传输译码.这些规则允许接受从而确定消息的传输长度(4.4节) 传输译码与MINE[7]的内容传输译码值相类似,它被定义能够实现传送服务器超过7位的二进制数据的安全传输.不过,安全传输对纯8位传输协议有不同的焦点.在HTTP中,消息体唯一不安全的特性是确定确切的体的长度的这个难点(7.2.2节),或在共享传输上加密的要求. 网络分配数字权威(IANA)担任了传输译码值标记注册处的角色.起初,注册包含如下标记:"大块"(3.6.1节),"身份"(3.6.2节),"gzip"(3.5节),"压缩"(3.5节),和"缩小"(3.5节). 新的传输译码值标记应和新的内容译码值标记以相同的方式注册(3.5节). 服务器接收到一个不能理解的传输译码实体时应返回501(不实现),并且切断联系.服务器不能向HTTP/1.0客户发送传输译码. 3.6.1 成块传输代码(Chunked Transfer Coding) 成块编码更改消息主体,为的是将它以一系列大块的形式传送,每一个连同它自己尺寸的指示器,被一个包含实体头域的可随意选择的trailer跟随.这允许有力量的地生产同接受所必需的消息一起转化的内容,从而检验它已经获得全部消息. chunk = chunk-size [ chunk-extension ] CRLF chunk-extension= *( ";" chunk-ext-name [ "=" chunk-ext-val ] ) 大块尺寸域是用16进制表示大块尺寸的一串数字.成块编码以任一尺寸为0的大块结束,后缀以trailer,以一个空行终止. trailer允许发送者在消息末尾包含附加的HTTP头域.trailer头域可被应用于简要说明包含trailer的头域 (14.40节) 一个服务器在应答中运用传输译码时不能在任何头域使用trailer,除非以下至少一条为真: 当消息被一个HTTP/1.1代理人接受并且8转寄至一个HTTP/1.0接受器时,这种需求防止了一个互用性的失误.它避免了一个依据协议将使在代理者上安置一个可能无限大的缓冲器成为必要的情形发生. 对一个大块主体进行解码处理的例子已在附录19.4.6中作过介绍 所有HTTP/1.1应用程序必须能接受和解码"大块"传输译码,并且必须忽略它们不理解的大块扩展扩展名. 3.7 媒体类型 为了提供公开的,可扩展的数据输入和规范流通,HTTP在目录类型(14.17节)和认可(14.1节)头域中运用网络媒体类型. 媒体类型 = 类型 "/" 亚类型*(";" 参数 ) 参数可能在属性/值的形式上遵循类型/亚类型.(如3.6节定义) 类型,亚类型,和参数属性名称是不直观的.参数值直观与否,取决于参数名称的意义. 注意一些旧的HTTP应用软件不能识别媒体类型参数.向一个旧的HTTP应用软件传送数据时,只有当类型/亚类型精确度需要时,才能实现媒体类型参数. 媒体类型值已经在网络分配数码权威(IANA[19])注册.媒体类型的注册程序在RFC 1590[17]中略述.使用未经注册的媒体类型是不会得心应手的. 3.7.1 规范化和原文缺省 网络媒体类型以语言的语音典型形式注册.一个通过HTTP通讯传输的实体必须被以先于传送的适当的规范的形式描绘,除'text'类形以外,就像下段定义的那样. 当在规范的形式中,'text'类型的媒体亚类型运用GRLF作为全文行的间断.HTTP放松了这个要求,当一个完整实体被间断完成时,允许全文媒体以简单的GR或LF独立作为一行的隔断的传输. 在通过HTTP承认的原文媒体中,作为一个行的间断的代表,HTTP应用程序必须接受CRLF,空的CR,和空的LF. 而且,如果原文在一个特性设置中被表现,没有分别用8位字节13和10表示CR和LF,就像某种多重字节特性设置,HTTP允许使用任何被为了表现CR和LF在行间断中的等同的特性设置所定义的任何8位字节次序.这个关于行间断的伸缩性仅仅应用于再一个实体中的原文媒体;一个空的CR或LF在任意HTTP控制的结构中都不能代替CRLF.(例如头域和多部边界) 如果一个实体把一个目录译码译成电码,在下面的译码必须被定义成在上面先被译码的形式. "charset"参数和一些媒体类型一起使用用来定义数据的特性设置(3.4节).当发送者没有提供清楚的charset参数,通过HTTP接受时"text"类型的媒体类型就被定义成有一个为"ISO-8859-1"的默认charset值.特性设置的数据不同于"ISO-8859-1"或它的子集必须被标以适当的charset值. 参见3.4.1节中兼容性问题. 3.7.2 多部分类型(Multipart type) MIME提供了一系列"多重部分"类型---在单个消息体内一个或多个实体的包装.所有的多重部分类型共享一个公共的序列,就像RFC 2046的5.1.1节中定义的那样. 通常,HTTP将一个消息体视为与任何其他媒体类型无异:严格如有效负载.当消息体出现在206应答时,有一个例外就是"多重部分/字符串"类型(附录19.2),将会被一些HTTP隐藏装置打断,就像13.5.4和14.16节中描述的那样.除此情况外,一个HTTP用户代理应该遵循与一个MINE用户代理相同或相似的行为,在多重部分类型收据之上.MIME头域在一个多重部分消息体的每一个部分里,对超过MIME意义的定义的HTTP没有任何意义. 通常, 一个HTTP用户代理应该遵循与一个MINE用户代理相同或相似的行为,在多重部分类型收据之上.如果一个应用程序收到一个不能识别的多重部分亚类型,这个应用程序必须将它视为与"多重部分/混合"相等. 注:"多重部分/形态-数据"形式已被在适合于通过POST请求方法处理的传送形式数据明确定义,就像在RFC 1867[15]中描述的那样. 3.8 产品标记 产品标记被用来承认通过软件名和译本识别它们自己的通讯应用软件.很多域还把产品标记用于认可次级产品,专业产品构成应用软件中有重要意义的部分被一一列出,用白色间隔分开.按照惯例,按产品对于识别应用软件的重要性的顺序列出它们. 产品 = 标示 ["/" 产品 -版本] 例: 3.9 质量值(Quality Values) HTTP内容流通(12节)运用简短的"浮点"数字来表明不同可流通参数之间的重要联系("重要性").一个重要性从0到1规格化了一个真实的数字,0是最小值,是最大值.如果一个参数为0的质量值,那么这个参数的内容不被客户接受.HTTP/1.1应用软件不能产生多于小数点后三位数字.这些值的用户配置也应受限于这种方式. "质量值" 是一个不当的用词,因为这些值仅仅表现想要得到的质量中的降级关系. 3.10 语言标记 一个语言标记和自然的语言一样说,写,或被人类用于与其他人传递信息.计算机语言明显不包括在内.HTTP在认可语言和目录语言域内运用语言标记. HTTP语言标记的语法和注册像RFC 1766[1]中定义的一样.总之,一个语言标记是由一部分或多部分构成:一个主要语言标记和可能为空的一系列下标签. 语言标记 = 主要标记 *("_" 下标签) en, en-US, en-cockney, i-cherokee, x-pig-latin 任何两个字母的主要标签是一个ISO-639语言的缩写,两个大写字母的下标签是一个ISO-3166的国家代码.(上面的最后三个标签是未经注册的标签;除最后一个之外所有都是可在将来注册的例子标签). 3.11 实体标签 实体标签用来从相同请求资源中比较两个或更多实体.HTTP/1.1在Etag(14.19节),If-match(14.24节),If-None-match(14.26节),和If-rang(14.27节)头域中运用实体标签.关于它们怎样像高速缓冲存储器确认一样使用和比较的解释在13.3.3节中.一个实体标签由一个给定的不透明的一行组成,可能加上一个虚弱指示器的前缀. entity-tag = [ weak ] opaque-tag 一个"坚固的(strong)实体标签"在两个实体八位子节相等时可能会被一个资源里的两个实体共享. 一个"虚弱(weak)的实体标签",由"W/"前缀表示,在实体相等且可以互相替代而在语义上不发生重大的变动时,可能会被一个资源力的两个实体共享.一个虚弱的实体标签只能在虚弱对比时使用. 一个实体标签必须在所有与一个特殊资源相连系实体的译本中是独一无二的.一个给定的实体标签值可以被不同的URI请求用来获得实体.相同实体标签值在不同URI请求获得实体的联合中的运用不意味着那些实体的等同. 3.12 范围单位(Range Units) HTTP/1.1允许一个客户要求单独部分的应答实体被包括在应答内.HTTP/1.1在范围(14.35节)和目录范围头域(14.16节)运用范围单位.一个实体可根据不同的结构单位分解成子区域. 范围-单位 = 字节-单位 | 其他-范围-单位 HTTP/1.1中定义的唯一的范围单位是"字节".HTTP/1.1实现时可能忽略其他单位指定的范围。
Copyright www.cnpaf.net (2007). All Rights Reserved. 4.1 消息类型 HTTP消息由从客户到服务器的请求和从服务器到客户的回答组成. 4.2 消息头 共同的格式. 消息-头=域名":"[域值] 这个域的内容不包括任何引导的或连接的LWS:位于域内容属性的第一个不是空白的地方的前面或最厚的布是空白的地方的后面.去掉这些引导或连接的LWS可能不会影响域内容的意思,任何位于域内容之间的LWS在解释域的内容或传送消息的下载流的时候可以用单个的SP替换. 多个消息头域使用同一个域可能会出现在一些消息中,在这些消息中,可能也只可能是整个域用逗号分割的列表定义(例如,#(值)).这些必须有可能在没有改变消息的情况下被组合成一个"域名:域值"对,在这些被逗号隔开的域中后面的域植被添加到第一个域中.那些用同一个域名组成一个头域的顺序是重要的,因此当一个消息在传输的时候代理一定不能改变这些域值的顺序. 4.3 消息体 HTTP消息的消息体备用用来传输由要求和应答组成的实体.这些消息体仅仅当传输译码被应用的时候才和实体不同,这用传输编码的头域标明(14.41节). 消息体=实体|<编码的实体> 传输编码常用来表示那些应用程序为了安全和保证消息的正确传输的传输码.传输编码是一种消息的属性而不是实体,因此沿着请求/应答链它可以被任何应用程序加上或去掉. 当一个消息中允许有消息体时的规则和请求应答时的不一样. 一个请求的消息体是用来传达内容长度或请求传输编码头的传输编码头域的信息.如果请求方式的规范不允许请求中加入实体则一个请求中也必须不能包括消息体.一个服务器必须读和处理任何请求的消息体;如果请求方法没有定义一个实体的表述,则当处理这个请求是必须忽略消息体. 对于应答消息,一个消息是否包括消息体依赖于请求的方法和应答的状态代码(6.1.1节).对于所有头请求方法的应答都不能包括消息体,即使有时实体头域的存在让人相信它们包括了.所有1XX(信息的),204(无内容的),和304(没有修改的)的应答都不能包括消息体.所有其他的应答必须包括消息体,虽然它可能长度为零. 4.4 消息的长度 一条消息的传输长度是消息体出现在消息中的长度,也就是说,当传输代码被处理以后.当一条消息包含消息体,实体的输长度有以下几条决定(以先后顺序): 1。任何回应信息不应包含在信息体中,如1xx,204,304回应和任何对头请求的回应。这种情况都是在头域结束后第一行为空白行,不管实体域是否出现。 2。传输代码头域(属于general-header域)出现的 |
|
| 楼主 创建:08-11-12 11:55:35 更新:08-11-12 11:55:35 | |
| 发表回复 | |