212

Which line break style is preferable for use in HTTP headers: \r\n or \n, and why?

0

3 Answers 3

306

\r\n, because it's defined as the line break in the protocol specification. RFC2616 states at the beginning of section 2.2, "Basic Rules", quite unambiguously:

CR = <US-ASCII CR, carriage return (13)>
LF = <US-ASCII LF, linefeed (10)>
HTTP/1.1 defines the sequence CR LF as the end-of-line marker for all protocol elements except the entity-body

RFC2616 was technically obsoleted by RFC7230, but it makes no drastic changes and again calls out CRLF as the delimiter in section 3, and that RFC references RFC5234, Appendix B.1 to define "CRLF" as %x0D %x0A.

However, recognizing that people will break the standard for whatever purposes, there is a "tolerance provision" in section 19.3 (note that it re-iterates the correct sequence):

The line terminator for message-header fields is the sequence CRLF. However, we recommend that applications, when parsing such headers, recognize a single LF as a line terminator and ignore the leading CR.

In the newer RFC7230, § 3.5

Although the line terminator for the start-line and header fields is the sequence CRLF, a recipient MAY recognize a single LF as a line terminator and ignore any preceding CR.

Therefore, unless you want to be Evil or otherwise break the RFC's rules, use \r\n.

Sign up to request clarification or add additional context in comments.

10 Comments

Good clear answer. This is exactly what StackOverflow is best for: simple clear answers to simple clear questions, without the unnecessary and unhelpful clutter of blogs and articles.
@Pacerier: Does not mention any such thing at all; since it essentially specifies "this is the only valid syntax for HTTP," anything else is invalid syntax. Of course, you could violate the RFC all you want, there's nobody who could stop you - but then you're technically not implementing a HTTP client anymore, just something that looks sort of similar ;)
IMHO, would be interesting to know WHY \r\n was chosen instead of other options (\r, \n, something else).
RFC7230 which obsoletes RFC2616 contains the same text in Section 3.5
CRLF is not for Microsoft. For the history of the topic see stackoverflow.com/questions/17262779/…
|
33

\r\n because RFC 2616 says so (Section 2.2, "Basic Rules"):

HTTP/1.1 defines the sequence CR LF as the end-of-line marker for all
protocol elements except the entity-body (see appendix 19.3 for
tolerant applications). The end-of-line marker within an entity-body is defined by its associated media type, as described in section 3.7.

   CRLF           = CR LF

Comments

17

CRLF ("\r\n"), because browsers follow RFC2616.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.