HTTP是应用级协议,它适应了分布式超媒体协作系统对灵活性及速度的要求。它是一个一般的、无状态的、基于对象的协议,通过对其请求方法(request methods)进行扩展,可以被用于多种用途,比如命名服务器(name server)及分布式对象管理系统。 HTTP 的一个特性是其数据表现类型允许系统的构建不再依赖于要传输的数据。 HTTP 自从 1990 年就在 WWW 上被广泛使用。该规范反映了“HTTP/1.0”的普通用
量的空格(LWS-linear whitespace)来分隔,这将使列表非常方便,如“(*LWS 元素 *( *LWS "," *LWS 元素 ))”就等同于“1#元素”。
空元素在结构中可被任意使用,但不参与元素个数的计数。也就是说,“(元素1),,(元素2)”仅表示2个元素。但在结构中,应至少有一个非空的元素存在。缺省值是0到无限,即“#(元素)”表示可取任何数值,包括0;而“1#元素”表示至少有1个;而“1#2元素”表示有1个或2个。
;注释(; comment)
分号后面是注释,仅在单行使用。
隐含*LWS(implied *LWS)
本文的语法描述是基于单词的。除非另有指定,线性空格(LWS)可以两个邻近符号或分隔符(tspecials)之间任意使用,而不会对整句的意思造成影响。在两个符号之间必须有至少一个分隔符,因为它们也要做为单独的符号来解释。实际上,应用程序在产生HTTP结构时,应当试图遵照“通常方式”,因为现在的确有些实现方式在通常方式下无法正常工作。
2.2 基本规则(Basic Rules)
下面的规则将用于本文后面对结构基本解析。
US-ASCII 编码字符集定义[17]。
OCTET = <8-bit的顺序数据,即bytes>
CHAR = < US-ASCII字符(取值为0 – 127的OCTET)>
UPALPHA = < US-ASCII 大写字符"A"到"Z">
LOALPHA = <US-ASCII 小写字符"a"到"z">
ALPHA = UPALPHA | LOALPHA
DIGIT = < US-ASCII 数字"0"到"9">
CTL = < US-ASCII 控制字符(取值0到31的octet )和DEL (127)> 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.0规定,除实体主体(Entity-Body,见附录B容错应用)外,所有协议元素的行结束标志都是CRLF(按字节顺序)。在实体主体内部的行结束标志定义及其对应的介质类型定义,见3.6节的描述。
CRLF = CR LF
HTTP/1.0的头可以折成许多行,只要每个后续行以空格或水平制表符开头。所有的线性空格(LWS),同空格(SP)有相同的语义。
LWS = [CRLF] 1*( SP | HT )
实际上,有些应用并没有考虑处理这样多行的头,所以从兼容性上考虑,HTTP/1.0应用最好不要产生折成多行的头。