Kiểu ngắt dòng tiêu đề HTTP


161

Kiểu ngắt dòng nào thích hợp hơn để sử dụng trong các tiêu đề HTTP: \r\nhoặc \n, và tại sao?

Câu trả lời:


224

\r\n, bởi vì nó được định nghĩa là ngắt dòng trong đặc tả giao thức. RFC2616 tuyên bố ở đầu phần 2.2, "Các quy tắc cơ bản" , khá rõ ràng:

CR = <US-ASCII CR, trả lại vận chuyển (13)>
LF = <US-ASCII LF, linefeed (10)>
HTTP / 1.1 xác định chuỗi CR LF là điểm đánh dấu cuối dòng cho tất cả các thành phần giao thức ngoại trừ thực thể -thân hình

RFC2616 đã bị RFC7230 lỗi thời về mặt kỹ thuật, nhưng nó không có thay đổi mạnh mẽ và lại gọi CRLF là dấu phân cách trong phần 3 , và RFC tham chiếu RFC5234, Phụ lục B.1 để định nghĩa "CRLF" là %x0D %x0A.

Tuy nhiên, nhận ra rằng mọi người sẽ phá vỡ tiêu chuẩn cho bất kỳ mục đích nào, có một "điều khoản dung sai" trong phần 19.3 (lưu ý rằng nó lặp lại trình tự chính xác ):

Bộ kết thúc dòng cho các trường tiêu đề thư là chuỗi CRLF. Tuy nhiên, chúng tôi khuyên các ứng dụng, khi phân tích các tiêu đề như vậy, hãy nhận ra một LF là một đầu cuối dòng và bỏ qua CR hàng đầu.

Trong RFC7230 mới hơn , § 3.5

Mặc dù bộ kết thúc dòng cho trường bắt đầu và trường tiêu đề là chuỗi CRLF, nhưng người nhận CÓ THỂ nhận ra một LF là bộ kết thúc dòng và bỏ qua mọi CR trước đó.

Do đó, trừ khi bạn muốn trở thành Ác ma hoặc phá vỡ các quy tắc của RFC, hãy sử dụng \r\n.


@Fred: Không, đó một điều như vậy là quá rõ ràng - sự lặp lại không cần thiết và không cần thiết lặp lại và lặp đi lặp lại vô nghĩa những đám mây thông tin tương tự được thông báo. Đặc biệt là khi điều tương tự được trích dẫn ngay trên - từ thông số kỹ thuật, không ít.
Piskvor rời khỏi tòa nhà

2
Tốt trả lời rõ ràng. Đây chính xác là những gì StackOverflow phù hợp nhất: câu trả lời rõ ràng đơn giản cho câu hỏi rõ ràng đơn giản, không có sự lộn xộn không cần thiết và không có ích của blog và bài viết.
Tuyến Miles

@MilesRout: Cảm ơn bạn :)
Piskvor rời khỏi tòa nhà vào

2
@Pacerier: Không đề cập đến bất kỳ điều gì như vậy cả; vì về cơ bản nó chỉ định "đây là cú pháp hợp lệ duy nhất cho HTTP", bất cứ điều gì khác là cú pháp không hợp lệ. Tất nhiên, bạn có thể vi phạm RFC tất cả những gì bạn muốn, không ai có thể ngăn bạn - nhưng về mặt kỹ thuật bạn không triển khai ứng dụng khách HTTP nữa, chỉ là thứ gì đó trông tương tự;)
Piskvor rời khỏi tòa nhà vào

2
RFC7230 đã lỗi thời RFC2616 chứa cùng một văn bản trong Phần 3.5
Đau buồn

22

\ r \ n vì RFC 2616 nói như vậy (Phần 2.2, "Quy tắc cơ bản"):

HTTP / 1.1 định nghĩa chuỗi CR LF là điểm đánh dấu cuối dòng cho tất cả các
thành phần giao thức ngoại trừ phần thân thực thể (xem phụ lục 19.3 cho
các ứng dụng dung sai). Điểm đánh dấu cuối dòng trong một cơ thể thực thể được xác định bởi loại phương tiện liên quan của nó, như được mô tả trong phần 3.7.

   CRLF           = CR LF

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.