HTTP RFC中所用到的规则

 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)
在元素前加星号“*”表示循环,其完整形式是“<n>*<m>元素”,表明元素最少产生<n>次,最多<m>次。缺省值是0到无限,例如,“1*元素”意思是至少有一个,而“1*2元素”表明允许有1个或2个。
[规则]([rule])
方括号内是可选元素。如“[元素1 元素2]”与“*1(元素1 元素2)”是一回事。
N 规则(N rule)
表明循环的次数:“<n>(元素)”就是“<n>*<n>(元素)”,也就是精确指出<n>取值。因而,2DIGIT 就是2位数字, 3ALPHA 就是由三个字母组成字符串。
#规则(#rule)
“#”与“*”类似,用于定义元素列表。
完整形式是“<n>#<m>元素”表示至少有<n>个至多有<m>个元素,中间用“,”或任意数量的空格(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应用最好不要产生折成多行的头。
TEXT规则只是用于描述消息解释器不关心的域的内容及其取值。文本内容可包含不同于US-ASCII的字符。
TEXT = <除了控制字符(CTLs)之外的任何OCTET,包括LWS >
在标题域中的收件人域如包含US-ASCII字符集以外的字符,这些字符将按照ISO-8859-1标准来解释。
十六进制数字型字符在几个协议元素中到。
HEX = "A" | "B" | "C" | "D" | "E" | "F"
| "a" | "b" | "c" | "d" | "e" | "f" | DIGIT
许多HTTP/1.0头域的内容由被LWS分隔的单词或特殊字符组成,这些特殊字符必须置于引号中间的字符串内,作为参数值使用。
Word = 符号(token)| 被引号引起来的字符串
token = 1*<除控制字符(CTLs)或tspecials之外的任意字符>
tspecials = "(" | ")" | "<" | ">" | "@"
| "," | ";" | ":" | "\" | <">
| "/" | "[" | "]" | "?" | "="
| "{" | "}" | SP | HT
在HTTP头域中可用括号表示注释文字。注释只允许写在包含注释的域,做为域值定义的一部分。在除此之外其它域中,括号将被视为域值。
comment = "(" *( ctext | comment ) ")"
ctext = <除圆括号外的任何TEXT>
被双引号圈中的文本字符串将被视为一个单词。
quoted-string= ( <"> *(qdtext) <"> )
qdtext = <除了双引号及控制字符之外的任何字符,包括LWS >
在HTTP/1.0中不允许使用后斜线“\”来引用单字符。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值