Стиль разрыва строки заголовка HTTP

161

Какой стиль разрыва строки предпочтителен для использования в HTTP-заголовках: \r\nили \nи почему?

Dpq
источник

Ответы:

224

\r\nпотому что это определено как разрыв строки в спецификации протокола. В начале раздела 2.2 «Основные правила» RFC2616 однозначно заявляет :

CR = <US-ASCII CR, возврат каретки (13)>
LF = <US-ASCII LF, перевод строки (10)>
HTTP / 1.1 определяет последовательность CR LF как маркер конца строки для всех элементов протокола, кроме объекта -Боди

RFC2616 технически устарел в RFC7230, но он не вносит радикальных изменений и снова вызывает CRLF в качестве разделителя в разделе 3 , а RFC ссылается на RFC5234, Приложение B.1, чтобы определить «CRLF» как %x0D %x0A.

Однако, признавая, что люди нарушают стандарт для каких-либо целей, в разделе 19.3 есть «положение о допуске» (обратите внимание, что оно повторяет правильную последовательность):

Терминатором строки для полей заголовка сообщения является последовательность CRLF. Однако мы рекомендуем приложениям при разборе таких заголовков распознавать один LF в качестве ограничителя строки и игнорировать ведущий CR.

В более новом RFC7230, § 3.5

Хотя терминатор строки для полей начальной строки и заголовка является последовательностью CRLF, получатель МОЖЕТ распознавать один LF как терминатор строки и игнорировать любой предшествующий CR.

Поэтому, если вы не хотите быть Злым или иным образом нарушать правила RFC, используйте \r\n.

Писквор покинул здание
источник
@Fred: Нет, там есть такая вещь , как слишком очевидно - ненужное повторение и излишне повторять и повторять бесцельно те же самую информацию облака сообщение. Особенно, когда то же самое цитируется прямо выше - из спецификации, не меньше.
Писквор покинул здание
2
Хороший четкий ответ. Это именно то, для чего лучше всего подходит StackOverflow: простые четкие ответы на простые понятные вопросы, без ненужного и бесполезного беспорядка в блогах и статьях.
Майлз Рут
@MilesRout: Спасибо :)
Писквор покинул здание
2
@Pacerier: вообще не упоминает ничего подобного; поскольку он по существу указывает «это единственный допустимый синтаксис для HTTP», все остальное является недопустимым синтаксисом. Конечно, вы можете нарушать RFC все, что хотите, никто не сможет вас остановить - но тогда вы технически не реализуете HTTP-клиента, просто что-то похожее;)
Писквор покинул здание
2
RFC7230, который устарел RFC2616 содержит тот же текст в Разделе 3.5
Горе
22

\ r \ n потому что RFC 2616 так говорит (Раздел 2.2, «Основные правила»):

HTTP / 1.1 определяет последовательность CR LF как маркер конца строки для всех
элементов протокола, кроме тела объекта (см. Приложение 19.3 для
толерантных приложений). Маркер конца строки в теле объекта определяется его связанным типом носителя, как описано в разделе 3.7.

   CRLF           = CR LF
SymKat
источник
13

CRLF ("\ r \ n"), потому что браузеры следуют RFC2616 .

Юрген Телен
источник