Как избежать литерала разрыва строки в заголовке HTTP? - PullRequest
11 голосов
/ 06 февраля 2009

В заголовке HTTP разрывы строк являются токенами для разделения полей в заголовке.

Но если я не хочу отправлять литерал разрыва строки в настраиваемом поле, как мне его избежать?

Ответы [ 5 ]

8 голосов
/ 06 февраля 2009

Если вы разрабатываете свое собственное поле расширения, вы можете использовать BASE64 или quote-printable для экранирования (и удаления) значения.

5 голосов
/ 28 декабря 2011

Идея заключается в том, что HTTP ASCII - только , а символы новой строки не допускаются . Если отправитель и получатель могут интерпретировать ВАШУ кодировку, тогда вы можете кодировать все, что захотите, как захотите. Вот как международные имена DNS обрабатываются с заголовком Host (он называется PUNYCODE).

Краткий ответ: нет, если вы не контролируете отправителя и получателя.

4 голосов
/ 05 октября 2015

Фактический ответ на этот вопрос заключается в том, что не существует стандарта для кодирования разрывов строк.

Вы можете использовать любую двоичную кодировку , такую ​​как URL-кодировка или Base64, но, очевидно, это будет работать, только если отправитель и получатель реализуют один и тот же метод.


RFC 2616 действительно позволял «складывать» (т. Е. Переносить) значения заголовка по нескольким строкам, но разрывы строк обрабатывались как один пробел, а не как часть проанализированного значения поля.

Однако эта спецификация устарела RFC 7230 , которая запрещает складывание:

Исторически значения полей заголовка HTTP могли быть расширены на несколько строк, предшествуя каждой дополнительной строке хотя бы с одним пробелом или горизонтальной табуляцией (obs-fold) .
В данной спецификации не рекомендуется использовать такие сгибы , за исключением message/http типа носителя ( Раздел 8.3.1 ) .
Отправитель НЕ ДОЛЖЕН генерировать сообщение, которое включает в себя перенос строки

Стандарт для разрывов строк в значениях полей заголовка HTTP не установлен и никогда не был установлен.

3 голосов
/ 06 февраля 2009

Согласно RFC2616 4.2 Заголовки сообщений :

Поля заголовка могут быть расширены несколько строк, предшествуя каждой дополнительной линия с хотя бы одним SP или HT.

, где SP означает символ пробела (0x20), а HT означает символ горизонтальной табуляции (0x09).

1 голос
/ 06 февраля 2009

Если это настраиваемое поле, то как вы его избегаете, полностью зависит от того, как целевое приложение будет его анализировать. Если это какое-то дополнение, которое вы создали, вы можете придерживаться URL-кодирования, поскольку оно довольно проверенное и верное, и во многих языках есть встроенные методы кодирования / декодирования, так что ваше веб-приложение будет кодировать его и ваш плагин (или все, над чем вы работаете) ) расшифрует его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...