Gaya break baris header HTTP

161

Gaya break baris mana yang lebih disukai untuk digunakan dalam header HTTP: \r\natau \n, dan mengapa?

dpq
sumber

Jawaban:

224

\r\n, karena itu didefinisikan sebagai garis istirahat dalam spesifikasi protokol. RFC2616 menyatakan di awal bagian 2.2, "Aturan Dasar" , cukup jelas:

CR = <US-ASCII CR, carriage return (13)>
LF = <US-ASCII LF, linefeed (10)>
HTTP / 1.1 mendefinisikan urutan CR LF sebagai penanda garis akhir untuk semua elemen protokol kecuali entitas -tubuh

RFC2616 secara teknis sudah usang oleh RFC7230, tetapi tidak membuat perubahan drastis dan lagi-lagi menyebut CRLF sebagai pembatas di bagian 3 , dan referensi RFC RFC5234, Lampiran B.1 untuk mendefinisikan "CRLF" sebagai %x0D %x0A.

Namun, mengakui bahwa orang akan melanggar standar untuk tujuan apa pun, ada "ketentuan toleransi" di bagian 19.3 (perhatikan bahwa itu mengulangi urutan yang benar ):

Terminator baris untuk bidang header pesan adalah urutan CRLF. Namun, kami merekomendasikan bahwa aplikasi, ketika mengurai header tersebut, mengenali LF tunggal sebagai terminator garis dan mengabaikan CR terkemuka.

Dalam RFC7230 yang lebih baru , § 3.5

Meskipun terminator garis untuk bidang mulai-baris dan header adalah urutan CRLF, penerima MUNGKIN mengenali LF tunggal sebagai terminator garis dan mengabaikan CR sebelumnya.

Oleh karena itu, kecuali Anda ingin menjadi Jahat atau melanggar aturan RFC, gunakan \r\n.

Piskvor meninggalkan gedung
sumber
@Fred: Tidak, ada adalah hal seperti terlalu jelas - pengulangan yang tidak diperlukan dan tidak perlu mengulang dan sia-sia mengulangi awan informasi yang sama pesan. Terutama ketika hal yang sama dikutip tepat di atas - dari spek, tidak kurang.
Piskvor meninggalkan gedung
2
Jawaban yang jelas dan bagus. Inilah yang terbaik untuk StackOverflow: jawaban yang jelas sederhana untuk pertanyaan yang jelas sederhana, tanpa kekacauan blog dan artikel yang tidak perlu dan tidak membantu.
Miles Rout
@MilesRout: Terima kasih :)
Piskvor meninggalkan gedung
2
@Pacerier: Tidak menyebutkan hal semacam itu sama sekali; karena pada dasarnya menentukan "ini adalah satu-satunya sintaks yang valid untuk HTTP," yang lain adalah sintaks yang tidak valid. Tentu saja, Anda dapat melanggar RFC semua yang Anda inginkan, tidak ada orang yang bisa menghentikan Anda - tetapi kemudian Anda secara teknis tidak mengimplementasikan klien HTTP lagi, hanya sesuatu yang terlihat mirip;)
Piskvor meninggalkan gedung
2
RFC7230 yang usang RFC2616 berisi teks yang sama di Bagian 3.5
Duka
22

\ r \ n karena RFC 2616 mengatakan demikian (Bagian 2.2, "Aturan Dasar"):

HTTP / 1.1 mendefinisikan urutan CR LF sebagai penanda end-of-line untuk semua
elemen protokol kecuali entitas-badan (lihat lampiran 19.3 untuk
aplikasi toleran). Penanda garis-akhir dalam entitas-badan ditentukan oleh jenis media yang terkait, seperti yang dijelaskan dalam bagian 3.7.

   CRLF           = CR LF
SymKat
sumber
13

CRLF ("\ r \ n"), karena browser mengikuti RFC2616 .

Jürgen Thelen
sumber