RFC对HTTP消息头的定义是什么?如何解读field-content的正式语法?
关于field-content描述的理解
你看到的非形式化描述可以拆成两层核心含义:
- field-content是构成HTTP头字段值的字节序列
- 其内容符合两类规则中的任意一类:
- 全由
TEXT规则定义的字符组成 - 由
token、分隔符、引用字符串三类元素任意组合而成
- 全由
你需要先明确RFC2616中几个基础语法单元的定义,就能完全理解这段描述:
token:不含控制字符、分隔符的ASCII可打印字符序列,头字段名、请求方法都属于这类separators:特指()<>@,;:\"/[]?={}、制表符这类用于分隔语法元素的特殊字符quoted-string:用双引号包裹的字符串,内部支持用反斜杠转义特殊字符TEXT:除了控制字符外的任意字节,允许包含非ASCII的多字节字符LWS:线性空白符,包含空格、制表符,以及头字段折行后开头的空白符
field-content的正式语法版本
RFC2616本身没有给出field-content更细化的正式ABNF规则,它本质是HTTP头字段值的通用兜底定义——不同的头字段会定义自己专属的语法规则,通用层只做基础的格式限定即可。
另外RFC2616已经被正式废弃,现行HTTP/1.1消息语法标准中对头部字段值的定义做了更清晰的修正,对应规则如下:
header-field = field-name ":" OWS field-value OWS field-name = token field-value = *( field-content / obs-fold ) field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ] field-vchar = VCHAR / obs-text
新规则废弃了原来模糊的描述,明确field-content由可见字符和中间可选的空白符组成,和旧标准的定义完全兼容。
内容的提问来源于stack exchange,提问作者Lance Pollard
相关产品推荐
相关产品推荐

