Stile di interruzione riga di intestazione HTTP


161

Quale stile di interruzione di riga è preferibile per l'uso nelle intestazioni HTTP: \r\no \n, e perché?

Risposte:


224

\r\n, poiché è definito come un'interruzione di riga nelle specifiche del protocollo. RFC2616 afferma all'inizio della sezione 2.2, "Regole di base" , in modo abbastanza inequivocabile:

CR = <US-ASCII CR, ritorno a
capo (13)> LF = <US-ASCII LF, linefeed (10)>
HTTP / 1.1 definisce la sequenza CR LF come marker di fine riga per tutti gli elementi del protocollo tranne l'entità -corpo

RFC2616 era tecnicamente obsoleto da RFC7230, ma non fa cambiamenti drastici e chiama nuovamente CRLF come delimitatore nella sezione 3 , e che RFC fa riferimento a RFC5234, Appendice B.1 per definire "CRLF" come %x0D %x0A.

Tuttavia, riconoscendo che le persone infrangeranno lo standard per qualunque scopo, c'è una "disposizione di tolleranza" nella sezione 19.3 (si noti che reinserisce la sequenza corretta ):

Il terminatore di riga per i campi di intestazione del messaggio è la sequenza CRLF. Tuttavia, si consiglia che le applicazioni, durante l'analisi di tali intestazioni, riconoscano un singolo LF come terminatore di linea e ignorino il CR iniziale.

Nella più recente RFC7230, § 3.5

Sebbene il terminatore di riga per i campi della riga iniziale e dell'intestazione sia la sequenza CRLF, un destinatario PUO 'riconoscere un singolo LF come terminatore di riga e ignorare qualsiasi CR precedente.

Pertanto, a meno che tu non voglia essere il Male o altrimenti infrangere le regole della RFC, usa \r\n.


@Fred: No, non è una cosa come essere troppo ovvio - la ripetizione non necessaria e inutilmente ripetere e inutilmente a ripetere le stesse informazioni nuvole il messaggio. Soprattutto quando la stessa cosa è citata proprio sopra - dalle specifiche, non meno.
Piskvor lasciò l'edificio l'

2
Buona risposta chiara. Questo è esattamente lo scopo di StackOverflow: risposte chiare e semplici a domande semplici e chiare, senza l'ingombro inutile e inutile di blog e articoli.
Miles Rout,

@MilesRout: Grazie :)
Piskvor ha lasciato l'edificio il

2
@Pacerier: non menziona nulla del genere; poiché specifica essenzialmente "questa è l'unica sintassi valida per HTTP", qualsiasi altra cosa è sintassi non valida. Naturalmente, si potrebbe violare tutte le RFC che si desidera, non c'è nessuno che potrebbe smettere di voi - ma allora sei tecnicamente non attuare più un client HTTP, solo qualcosa che sembra una sorta di simile;)
Piskvor lasciato l'edificio

2
RFC7230 che viola RFC2616 contiene lo stesso testo nella Sezione 3.5
Lutto

22

\ r \ n perché lo dice RFC 2616 (Sezione 2.2, "Regole di base"):

HTTP / 1.1 definisce la sequenza CR LF come marker di fine riga per tutti gli
elementi del protocollo tranne l'entità-corpo (consultare l'appendice 19.3 per
applicazioni tolleranti). Il marker di fine riga all'interno di un corpo-entità è definito dal tipo di supporto associato, come descritto nella sezione 3.7.

   CRLF           = CR LF

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.