Estilo de salto de línea de encabezado HTTP

161

¿Qué estilo de salto de línea es preferible para usar en encabezados HTTP: \r\no \n, y por qué?

dpq
fuente

Respuestas:

224

\r\n, porque se define como el salto de línea en la especificación del protocolo. RFC2616 establece al comienzo de la sección 2.2, "Reglas básicas" , sin ambigüedades:

CR = <US-ASCII CR, retorno de carro (13)>
LF = <US-ASCII LF, salto de línea (10)>
HTTP / 1.1 define la secuencia CR LF como el marcador de fin de línea para todos los elementos del protocolo, excepto la entidad -cuerpo

RFC2616 fue técnicamente obsoleto por RFC7230, pero no hace cambios drásticos y nuevamente llama a CRLF como delimitador en la sección 3 , y ese RFC hace referencia a RFC5234, Apéndice B.1 para definir "CRLF" como %x0D %x0A.

Sin embargo, reconociendo que las personas romperán el estándar para cualquier propósito, hay una "disposición de tolerancia" en la sección 19.3 (tenga en cuenta que reitera la secuencia correcta ):

El terminador de línea para los campos de encabezado de mensaje es la secuencia CRLF. Sin embargo, recomendamos que las aplicaciones, al analizar dichos encabezados, reconozcan un solo LF como un terminador de línea e ignoren el CR principal.

En el nuevo RFC7230, § 3.5

Aunque el terminador de línea para los campos de encabezado y línea de inicio es la secuencia CRLF, un destinatario PUEDE reconocer un solo LF como un terminador de línea e ignorar cualquier CR precedente.

Por lo tanto, a menos que quieras ser malvado o de otra manera romper las reglas del RFC, úsalo \r\n.

Piskvor salió del edificio
fuente
@Fred: No, es demasiado obvio: la repetición innecesaria y la repetición innecesaria y sin sentido de la misma información nubla el mensaje. Especialmente cuando lo mismo se cita arriba, de la especificación, nada menos.
Piskvor salió del edificio el
2
Buena respuesta clara. Esto es exactamente para lo que StackOverflow es mejor: respuestas simples y claras a preguntas simples y claras, sin el desorden innecesario e inútil de blogs y artículos.
Miles Rout
@MilesRout: Gracias :)
Piskvor salió del edificio el
2
@Pacerier: No menciona nada de eso; dado que esencialmente especifica "esta es la única sintaxis válida para HTTP", cualquier otra cosa es sintaxis no válida. Por supuesto, podría violar el RFC todo lo que quiera, no hay nadie que pueda detenerlo, pero técnicamente ya no está implementando un cliente HTTP, solo algo que se ve algo similar;)
Piskvor dejó el edificio el
2
RFC7230 que queda obsoleto RFC2616 contiene el mismo texto en la Sección 3.5
Duelo
22

\ r \ n porque RFC 2616 lo dice (Sección 2.2, "Reglas básicas"):

HTTP / 1.1 define la secuencia CR LF como el marcador de fin de línea para todos los
elementos del protocolo, excepto el cuerpo de la entidad (consulte el apéndice 19.3 para
aplicaciones tolerantes). El marcador de fin de línea dentro de un cuerpo de entidad se define por su tipo de medio asociado, como se describe en la sección 3.7.

   CRLF           = CR LF
SymKat
fuente
13

CRLF ("\ r \ n"), porque los navegadores siguen RFC2616 .

Jürgen Thelen
fuente