HTTP标题行中断样式

dpq*_*dpq 156 http line-breaks

哪种换行符样式最适合在HTTP标头中使用:\r\n或者\n,为什么?

Pis*_*3.0 217

\r\n,因为它被定义为协议规范中的换行符.RFC2616在第2.2节(基本规则(!))的开头陈述,非常明确:

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

但是,认识到人们会出于任何目的打破标准,第19.3节中有一个"容忍条款" (注意它重新迭代了正确的顺序):

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

因此,除非您想成为Evil或以其他方式违反RFC的规则,否则请使用%x0D %x0A.

  • 好清楚的答案.这正是StackOverflow最适合的原因:对简单明确的问题的简单明确答案,没有博客和文章的不必要和无益的混乱. (2认同)
  • @Pacerier:根本没有提到任何这样的事情; 因为它实质上指定"这是HTTP的唯一有效语法",所以其他任何东西都是无效的语法.当然,你*可以*违反RFC你想要的任何东西,没有人可以阻止你 - 但是你在技术上不再实现HTTP客户端,只是看起来有点类似的东西;) (2认同)
  • 废弃RFC2616的RFC7230在[第3.5节](https://tools.ietf.org/html/rfc7230#section-3.5)中包含相同的文本 (2认同)

小智 22

\ r \n因为RFC 2616这样说(第2.2节"基本规则"):

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

   CRLF           = CR LF
Run Code Online (Sandbox Code Playgroud)


Jür*_*len 13

CRLF("\ r \n"),因为浏览器遵循RFC2616.