【发布时间】:2011-08-11 01:36:27
【问题描述】:
哪种换行样式更适合在 HTTP 标头中使用:\r\n 或 \n,为什么?
【问题讨论】:
标签: http line-breaks
哪种换行样式更适合在 HTTP 标头中使用:\r\n 或 \n,为什么?
【问题讨论】:
标签: http line-breaks
\r\n,因为它被定义为协议规范中的换行符。 RFC2616 states at the beginning of section 2.2, "Basic Rules",非常明确:
CR =
LF =
HTTP/1.1 将序列 CR LF 定义为除实体主体之外的所有协议元素的行尾标记
RFC2616 在技术上已被 RFC7230 淘汰,但它没有进行重大更改,并再次将 CRLF 称为 section 3 中的分隔符,并且 RFC 引用 RFC5234, Appendix B.1 将“CRLF”定义为 %x0D %x0A。
但是,认识到人们会出于任何目的违反标准,section 19.3 中有一个“容忍规定”(请注意,它重复了 正确 序列):
消息头字段的行终止符是序列 CRLF。但是,我们建议应用程序在解析此类标头时,将单个 LF 识别为行终止符并忽略前导 CR。
在较新的RFC7230, § 3.5
虽然起始行和标题字段的行终止符是序列 CRLF,但接收者可以将单个 LF 识别为行终止符并忽略任何前面的 CR。
因此,除非您想成为 Evil 或以其他方式违反 RFC 规则,否则请使用 \r\n。
【讨论】:
\r\n 因为 RFC 2616 这么说(第 2.2 节,“基本规则”):
HTTP/1.1 定义了序列 CR LF 作为所有的行尾标记
协议元素,除了 实体主体(参见附录 19.3
宽容的应用)。这 内的行尾标记 entity-body 由其定义 关联的媒体类型,如中所述 第 3.7 节。CRLF = CR LF
【讨论】:
CRLF ("\r\n"),因为浏览器遵循RFC2616。
【讨论】: