You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于RFC7230中HTTP Header value允许字符规则的解读问询

HTTP头部字段值ABNF规则解读
field-value    = *( field-content / obs-fold )
 field-content  = field-vchar [ 1*( SP / HTAB ) field-vchar ]
 field-vchar    = VCHAR / obs-text

 obs-fold       = CRLF 1*( SP / HTAB )
                ; obsolete line folding
                ; see Section 3.2.4

前置ABNF符号说明

  • *:表示前置元素可出现0次或多次
  • /:表示左右元素二选一
  • []:包裹的内容为可选元素,可出现0次或1次
  • 1*():表示括号内元素至少出现1次
  • SP:空格符(ASCII 0x20)
  • HTAB:水平制表符(ASCII 0x09)
  • CRLF:回车换行符(\r\n,HTTP协议的标准换行符)

逐规则解读

field-value(头部字段值整体)

规则定义头部值由0个或多个「合法字段内容」或「过时行折叠符」组成,用于兼容旧版协议的折叠格式。

field-content(合法字段内容)

合法内容的结构为:开头必须是1个合法的字段可见字符,后续可选择性添加「至少1个空格/制表符 + 1个合法字段可见字符」的组合。
通俗来说:空格和制表符只能出现在两个可见字符中间,不允许出现在内容的首尾,连续空白会被视为两个可见字符之间的分隔,具体是否保留要看解析实现。

field-vchar(合法字段可见字符)

允许两类字符:

  • VCHAR:标准ASCII可打印字符,编码范围为0x21~0x7E,包含数字、大小写英文字母、常用标点符号
  • obs-text:兼容旧实现的扩展字符,编码范围为0x80~0xFF,属于非ASCII的高位字符,新版协议不推荐主动使用

obs-fold(过时行折叠规则)

这是已经废弃的旧协议特性,早年允许将过长的头部值折为多行,换行后行首添加至少1个空格或制表符,接收端解析时会把折叠的多行内容拼接为完整的字段值。目前新版HTTP实现禁止主动发送该格式的内容,仅接收端会保留兼容解析能力。

开发注意事项

  • 不要主动在头部值中使用0x80~0xFF的高位非ASCII字符,如需传递非ASCII内容,应先做百分号编码或Base64编码
  • 不要使用过时的行折叠格式,过长的头部值直接放在同一行即可
  • 不要在头部值首尾添加空格或制表符,避免不同实现的解析差异导致异常

内容的提问来源于stack exchange,提问作者Salman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 14:48:03