Ответы:
\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
.
\ r \ n потому что RFC 2616 так говорит (Раздел 2.2, «Основные правила»):
HTTP / 1.1 определяет последовательность CR LF как маркер конца строки для всех
элементов протокола, кроме тела объекта (см. Приложение 19.3 для
толерантных приложений). Маркер конца строки в теле объекта определяется его связанным типом носителя, как описано в разделе 3.7.CRLF = CR LF
CRLF ("\ r \ n"), потому что браузеры следуют RFC2616 .