HTTP Chrome 请求中的 CRLF
CRLF in HTTP Chrome requests
根据 RFC (7230 and 2616) HTTP 消息是:
generic-message = start-line
*(message-header CRLF)
CRLF
[ message-body ]
start-line = Request-Line | Status-Line
message-header = field-name ":" [ field-value ]
field-name = token
field-value = *( field-content | LWS )
field-content = <the OCTETs making up the field-value
and consisting of either *TEXT or combinations
of token, separators, and quoted-string>
所以单个CRLF
被认为是EOL标志。但是当我收到 Chrome 或 Firefox 的请求时,我会看到额外的 CR
.
解析规则应该是什么?
正如 Jon Postel 在许多 RFC 中所说,"be liberal in what you accept, and conservative in what you send"。
well-formed 客户不应该发送这样的东西。但是错误发生了,并且必须在某处应用换行符转换。因此,只要您可以安全地处理这些情况,将这些换行符(通常,任何 \r*\n
序列,将其作为正则表达式)解析为 header 中的单个换行符应该是最好的方法。
如果您根本无法解析 header,只是 return 错误请求错误。
根据 RFC (7230 and 2616) HTTP 消息是:
generic-message = start-line
*(message-header CRLF)
CRLF
[ message-body ]
start-line = Request-Line | Status-Line
message-header = field-name ":" [ field-value ]
field-name = token
field-value = *( field-content | LWS )
field-content = <the OCTETs making up the field-value
and consisting of either *TEXT or combinations
of token, separators, and quoted-string>
所以单个CRLF
被认为是EOL标志。但是当我收到 Chrome 或 Firefox 的请求时,我会看到额外的 CR
.
解析规则应该是什么?
正如 Jon Postel 在许多 RFC 中所说,"be liberal in what you accept, and conservative in what you send"。
well-formed 客户不应该发送这样的东西。但是错误发生了,并且必须在某处应用换行符转换。因此,只要您可以安全地处理这些情况,将这些换行符(通常,任何 \r*\n
序列,将其作为正则表达式)解析为 header 中的单个换行符应该是最好的方法。
如果您根本无法解析 header,只是 return 错误请求错误。