Câu trả lời:
\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.
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
.
\ 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
CRLF ("\ r \ n"), vì các trình duyệt tuân theo RFC2616 .