Estilo de quebra de linha do cabeçalho HTTP


161

Qual estilo de quebra de linha é preferível para uso em cabeçalhos HTTP: \r\n ou \n, e por quê?

Respostas:


224

\r\n, porque é definido como a quebra de linha na especificação do protocolo. A RFC2616 declara no início da seção 2.2, "Regras básicas" , sem ambiguidade:

CR = <US-ASCII CR, retorno de carro (13)>
LF = <US-ASCII LF, avanço de linha (10)>
HTTP / 1.1 define a sequência CR LF como o marcador de fim de linha para todos os elementos do protocolo, exceto a entidade -corpo

O RFC2616 foi tecnicamente obsoleto pelo RFC7230, mas não faz alterações drásticas e novamente chama o CRLF como o delimitador na seção 3 , e esse RFC faz referência ao RFC5234, Apêndice B.1 para definir "CRLF" como %x0D %x0A.

No entanto, reconhecendo que as pessoas quebram o padrão para quaisquer fins, existe uma "provisão de tolerância" na seção 19.3 (observe que ele reitera a sequência correta ):

O terminador de linha para os campos do cabeçalho da mensagem é a sequência CRLF. No entanto, recomendamos que os aplicativos, ao analisar esses cabeçalhos, reconheçam um único LF como um terminador de linha e ignorem o CR principal.

No mais novo RFC7230 recente, § 3.5

Embora o terminador de linha para os campos de linha de início e cabeçalho seja a sequência CRLF, um destinatário PODE reconhecer um único LF como terminador de linha e ignorar qualquer CR anterior.

Portanto, a menos que você queira ser mau ou violar as regras da RFC, use \r\n.


@Fred: Não, não é uma coisa como sendo muito óbvia - a repetição desnecessária e desnecessariamente repetindo e inutilmente repetir as mesmas informações nuvens a mensagem. Especialmente quando a mesma coisa é citada logo acima - das especificações, nada menos.
Piskvor saiu do prédio 11/07

2
Boa resposta clara. É exatamente para isso que o StackOverflow é melhor: respostas simples e claras a perguntas simples e claras, sem a confusão desnecessária e inútil de blogs e artigos.
Route de milhas

@MilesRout: Obrigado :)
Piskvor saiu do prédio

2
@ Pacerier: Não menciona nada disso; uma vez que especifica essencialmente "esta é a única sintaxe válida para HTTP", qualquer outra coisa é sintaxe inválida. Claro, você poderia violar a RFC tudo que você quer, não há ninguém que poderia impedi-lo - mas então você tecnicamente não está implementando um cliente HTTP mais, apenas algo que parece tipo de similar;)
Piskvor deixou o prédio

2
RFC7230, que obsoleta RFC2616, contém o mesmo texto na Seção 3.5
Luto

22

\ r \ n porque o RFC 2616 diz isso (Seção 2.2, "Regras básicas"):

O HTTP / 1.1 define a sequência CR LF como o marcador de fim de linha para todos os
elementos do protocolo, exceto o corpo da entidade (consulte o apêndice 19.3 para
aplicações tolerantes). O marcador de fim de linha em um corpo da entidade é definido pelo tipo de mídia associado, conforme descrito na seção 3.7.

   CRLF           = CR LF

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.