应该如何解析 HTTP header 字段?
How should an HTTP header field be parsed?
我正在尝试根据 the relevant section of RFC 7230 中指定的 ABNF 规则 header-field
解析 HTTP header 字段。这些规则是:
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
obs-fold = CRLF 1*( SP / HTAB )
; obsolete line folding
; see Section 3.2.4
(obs-text
只是 high-order 字节 0x80 到 0xff)。
我面临的问题是 header-field
规则似乎在应用 chrome 在响应模式下设置的 user-agent 字符串时失败:
User-Agent: Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.90 Mobile Safari/537.36
问题源于单独的“5”:当解析器到达“Nexus”中的最终 's' 时,它需要 's'、后面的 space 和'5'。这会将解析光标直接留在 space 之后。即
Parsed: ______________]
Data: ...6.0; Nexus 5 Build/MRA58N...
Cursor: ^
由于 feild-content
不提供前导白色 space,规则无法匹配整个 header 字段,这导致解析器无法解析消息的其余部分.
对我来说很明显 HTTP headers 应该能够包含被白色包围的单个字符space。然而,根据我对规范的阅读,这似乎是不允许的。
我在网上搜索过,但没有找到任何相关内容。所以我假设这是我的错误。我的错误在哪里?以及该规则实际上应该如何解释?
对于 RFC,您可以在首页上找到勘误表:
Information about the current status of this document, any errata,
and how to provide feedback on it may be obtained at
http://www.rfc-editor.org/info/rfc7230.
这一个可能是 https://www.rfc-editor.org/errata/eid4189 - see https://github.com/httpwg/http-core/issues/19 以获取更多信息。
我正在尝试根据 the relevant section of RFC 7230 中指定的 ABNF 规则 header-field
解析 HTTP header 字段。这些规则是:
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
obs-fold = CRLF 1*( SP / HTAB )
; obsolete line folding
; see Section 3.2.4
(obs-text
只是 high-order 字节 0x80 到 0xff)。
我面临的问题是 header-field
规则似乎在应用 chrome 在响应模式下设置的 user-agent 字符串时失败:
User-Agent: Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.90 Mobile Safari/537.36
问题源于单独的“5”:当解析器到达“Nexus”中的最终 's' 时,它需要 's'、后面的 space 和'5'。这会将解析光标直接留在 space 之后。即
Parsed: ______________]
Data: ...6.0; Nexus 5 Build/MRA58N...
Cursor: ^
由于 feild-content
不提供前导白色 space,规则无法匹配整个 header 字段,这导致解析器无法解析消息的其余部分.
对我来说很明显 HTTP headers 应该能够包含被白色包围的单个字符space。然而,根据我对规范的阅读,这似乎是不允许的。
我在网上搜索过,但没有找到任何相关内容。所以我假设这是我的错误。我的错误在哪里?以及该规则实际上应该如何解释?
对于 RFC,您可以在首页上找到勘误表:
Information about the current status of this document, any errata, and how to provide feedback on it may be obtained at
http://www.rfc-editor.org/info/rfc7230.
这一个可能是 https://www.rfc-editor.org/errata/eid4189 - see https://github.com/httpwg/http-core/issues/19 以获取更多信息。