【问题标题】:HTTP header line break styleHTTP 标头换行样式
【发布时间】:2011-08-11 01:36:27
【问题描述】:

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

【问题讨论】:

    标签: http line-breaks


    【解决方案1】:

    \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

    【讨论】:

    • @Fred:不,这样的事情太明显了——不必要的重复、不必要的重复和毫无意义的重复相同的信息会混淆信息。尤其是当上面引用相同的内容时 - 来自规范,不少于。
    • 好明确的答案。这正是 StackOverflow 最适合的:对简单明确的问题的简单明确的答案,没有博客和文章的不必要和无用的混乱。
    • @Pacerier:根本没有提到任何这样的事情;因为它本质上指定“这是 HTTP 的唯一有效语法”,所以其他任何语法都是无效的。当然,您可以随心所欲地违反 RFC,没有人可以阻止您 - 但是从技术上讲,您不再实现 HTTP 客户端,只是看起来有点相似;)跨度>
    • @DanM:感谢微软!
    • RFC7230 废弃了 RFC2616,在 Section 3.5 中包含相同的文本
    【解决方案2】:

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

    HTTP/1.1 定义了序列 CR LF 作为所有的行尾标记
    协议元素,除了 实体主体(参见附录 19.3
    宽容的应用)。这 内的行尾标记 entity-body 由其定义 关联的媒体类型,如中所述 第 3.7 节。

       CRLF           = CR LF
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2011-12-26
        • 2012-07-06
        • 1970-01-01
        • 1970-01-01
        • 2012-07-11
        • 1970-01-01
        • 2018-04-06
        • 1970-01-01
        • 2018-08-11
        相关资源
        最近更新 更多