HTTP标头换行样式


161

哪种换行样式更适合用于HTTP标头:\r\n\n,为什么?

Answers:


224

\r\n,因为在协议规范中将其定义为换行符。RFC2616在第2.2节“基本规则”的开头明确指出

CR = <US-ASCII CR,回车(13)>
LF = <US-ASCII LF,换行(10)>
HTTP / 1.1将序列CR LF定义为除实体之外的所有协议元素的行尾标记-身体

RFC2616在技术上已被RFC7230淘汰,但是并没有进行太大的更改,因此在第3节中再次将CRLF称为分隔符,并且RFC引用RFC5234附录B.1将“ CRLF”定义为%x0D %x0A

但是,认识到人们会出于任何目的而违反标准,因此在19.3节中有一个“宽容条款” (请注意,它重申了正确的顺序):

邮件标题字段的行终止符是序列CRLF。但是,我们建议应用程序在解析此类标头时,将单个LF识别为行终止符,并忽略前导CR。

在较新的RFC7230中,第3.5节

尽管起始行和头域的行终止符是序列CRLF,但是接收者可以将单个LF识别为行终止符,而忽略任何先前的CR。

因此,除非您想成为邪恶或违反RFC的规则,否则请使用\r\n


@Fred:没有,这样的事情作为太明显-不需要的重复和不必要的重复和无意义重复相同信息云消息。尤其是当上面引用相同的内容时-从规格中可以看到不少。
Piskvor于

2
好明确的答案。这正是StackOverflow的最佳选择:简单明确的问题的简单明了的答案,而不会造成不必要的博客和文章混乱。
Miles Rout

@MilesRout:谢谢:)
Piskvor在2014年

2
@Pacerier:完全没有提到任何此类事情;因为它本质上指定“这是HTTP的唯一有效语法”,所以其他所有内容都是无效语法。当然,您可以随意违反RFC,没有人可以阻止您-但是从技术上讲,您不再实现HTTP客户端,只是看起来有点类似;)
Piskvor离开了建筑物

2
淘汰RFC2616的RFC7230在第3.5节
悲伤

22

\ r \ n,因为RFC 2616这么说(第2.2节“基本规则”):

HTTP / 1.1将序列CR LF定义为所有行的行尾标记
除实体主体之外的协议元素(有关允许的
应用程序,请参见附录19.3 )。实体中的行尾标记由其关联的媒体类型定义,如第3.7节所述。

   CRLF           = CR LF

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.