Как анализировать поле заголовка HTTP? - PullRequest
0 голосов
/ 02 июля 2019

Я пытаюсь проанализировать поле заголовка HTTP в соответствии с правилом ABNF header-field, указанным в в соответствующем разделе RFC 7230 .Вот эти правила:

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 - это просто старшие байты от 0x80 до 0xff).

Проблема, с которой я сталкиваюсь, заключается в том, что правило header-field, похоже, перестает работать, когдаприменил строку user-agent, которую устанавливает chrome в режиме реагирования:

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»: когда анализатор достигает последних «s» в «Nexus», он принимает оба's', следующий пробел и '5'.Это оставляет курсор синтаксического анализа в пробел сразу после.То есть

   Parsed:    ______________]
   Data:      ...6.0; Nexus 5 Build/MRA58N...
   Cursor:                   ^

Поскольку feild-content не допускает начальные пробелы, правило не может сопоставляться со всем полем заголовка, что приводит к тому, что синтаксический анализатор не может проанализировать остальную часть сообщения.

Для меня очевидно, что заголовки HTTP должны содержать отдельные символы, окруженные пробелами.Однако это, по-моему, запрещено в соответствии с моим прочтением спецификации.

Я искал в Интернете, но не нашел ничего подходящего.Поэтому я предполагаю, что это ошибка с моей стороны.Где моя ошибка?и как на самом деле должно интерпретироваться правило?

1 Ответ

1 голос
/ 02 июля 2019

Для RFC вы можете найти ошибки, как указано на первой странице:

Информация о текущем статусе этого документа, любые ошибки, а как предоставить отзыв о нем можно получить на
http://www.rfc -editor.org / Информация / rfc7230 .

Вероятно, это https://www.rfc -editor.org / errata / eid4189 - для получения дополнительной информации см. https://github.com/httpwg/http-core/issues/19.

...