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 错误请求错误。