CRLF в запросах HTTP Chrome - PullRequest
       8

CRLF в запросах HTTP Chrome

0 голосов
/ 10 декабря 2018

Согласно RFC ( 7230 и 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.

Request HEX text

Какими должны быть правила синтаксического анализа?

1 Ответ

0 голосов
/ 10 декабря 2018

Как сказал Джон Постел во многих RFC, «будьте либеральными в том, что вы принимаете, и консервативными в том, что вы отправляете».

Хорошо сформированный клиент никогда не должен отправлять что-то подобное.Но случаются ошибки, и что-то должно быть применено преобразование новой строки где-то вниз по линии.Таким образом, до тех пор, пока вы можете безопасно обрабатывать эти случаи, лучший способ сделать это - анализ этих новых строк (и вообще любой последовательности \r*\n, чтобы обозначить ее как регулярное выражение) как единственной новой строки в заголовке.

Если вы вообще не можете разобрать заголовок, просто верните ошибку Bad Request.

...