在HTTP标头中,哪种换行符样式更好:\r\n还是\n?为什么?
\r\n
是协议规范中定义的换行符号。RFC2616在2.2节开头非常明确地声明了"基本规则",:
CR = <US-ASCII CR, 回车符 (13)>
LF = <US-ASCII LF, 换行符 (10)>
HTTP/1.1将CR LF序列定义为除实体主体外所有协议元素的行尾标记。
RFC2616在技术上已被RFC7230取代,但它没有进行重大更改,并再次将CRLF作为分隔符在第3节中进行引用,并且该RFC参考RFC5234,附录B.1来定义"CRLF"为%x0D %x0A
。
然而,鉴于人们会为任何目的打破标准,因此在第19.3节中有一个"容错规定"(请注意,它重新强调了正确的序列):
“message-header fields”的行终止符是CRLF序列。但是,我们建议应用程序在解析此类标题时,将单个LF识别为行终止符并忽略前导CR。\r\n
。\r\n
是因为 RFC 2616 规定的(第2.2节,“基本规则”):
HTTP/1.1 定义了 CR LF 序列作为除实体主体之外的所有协议元素的行尾标记(参见附录19.3,用于宽容的应用程序)。实体主体内部的行尾标记由其关联的媒体类型定义,如第3.7节所述。
CRLF = CR LF
\r\n
而不是其他选项(\r
、\n
或其他)会很有趣。 - Dan M.