【问题标题】:What HTTP response headers are required需要哪些 HTTP 响应标头
【发布时间】:2011-06-11 05:20:34
【问题描述】:

从服务器发送到客户端需要哪些 HTTP 响应标头?

我正在努力优化 HTTP 响应标头以最小化 HTTP 响应开销。我知道“开销”有些夸张,但我喜欢干净的输出。

我看到很多网站都会发送冗余缓存头。

例如

同时指定ExpiresCache-Control: max-age,或者同时指定Last-ModifiedETag 是多余的。

  • Source
  • HTTP/1.1:标头字段定义

【问题讨论】:

    标签: http http-headers httpresponse


    【解决方案1】:

    这取决于您定义为什么是必需的:无论在什么情况下,都没有必须随每个响应发送的标头字段,但是您确实应该发送一些标头字段。唯一接近的标头字段是Date,但即使在某些情况下也不需要它。

    RFC 2119 的说法,MUST 意味着某事是规范的要求,不满足要求将是无效的。没有由 RFC 723072317232723372347235 定义的标头字段必须由源服务器发送在所有情况下


    例如,可以省略以下标题(尽管您可能应该发送它们):

    7.1.1.2. Date

    如果源服务器不发送Date 标头字段,则它不得发送 有一个时钟能够提供一个合理的近似值 协调世界时的当前实例。源服务器可以 如果响应在 1xx 中,则发送 Date 标头字段 (信息性)或 5xx(服务器错误)类状态代码。一个 在所有其他情况下,源服务器必须发送 Date 标头字段。

    注意引文的最后一句话。如果源服务器能够提供 UTC 日期的“合理近似值”,则必须发送 Date 标头字段,但没有什么可以阻止服务器歪曲自己。

    7.4.2. Server

    源服务器可以在其响应中生成Server 字段。

    3.3.2. Content-Length

    除了[有限数量的预定义案例],在没有 Transfer-Encoding,源服务器应该发送Content-Length 当在发送之前已知有效载荷主体大小时的头字段 完整的标题部分。

    关于Content-LengthTransfer-Encoding 的主题,请注意两者都不能发送,在这种情况下,响应的长度是“由服务器关闭连接之前接收到的八位字节数确定的。”

    3.1.1.5. Content-Type

    如果Content-Type 标头字段不存在,则收件人 可以假设媒体类型为application/octet-stream (RFC2046,第 4.5.1 节)或检查数据以确定其类型。


    在某些情况下可能需要特定的标头,例如:

    【讨论】:

      【解决方案2】:

      这取决于响应的具体情况,但通常来自源服务器的响应应具有:

      • 日期
      • 内容类型
      • 服务器

      以及内容长度、传输编码或连接:关闭。

      如果要进行缓存,请添加 Cache-Control(例如,使用 max-age); Expires 通常不再需要。如果您希望客户端能够验证,请添加 Last-Modified 或 ETag。

      【讨论】:

      • 感谢您的回答!但我认为“服务器”标题并不重要。避免此标头条目也是一种安全保护。攻击者没有“任何”信息,例如“OS/Webserver/-version”。
      • 顺便说一句:“连接”响应条目的默认值是来自请求的标题条目“连接:关闭/保持活动”的值?
      • 服务器不是严格要求的,但有些客户似乎想要它,IIRC。一定要把它减少到最低限度。 WRT Connection:不,这是服务器打算对连接执行的操作;它选择发送哪个。
      • 严格来说,这些都不是必须的;如果您查看 RFC2616(和 httpbis 文档),您会发现如果源服务器没有时钟,则可以省略 Date; content-type 可以省略(默认为 application/octet-stream)并且服务器被鼓励但不是必须的。这至少部分是因为我们需要在某种程度上向后兼容 HTTP/0.9,它根本没有标头。但是,要使响应有用,它确实需要一些。
      • @algal 当它来自规范作者之一时,我认为没关系。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-06
      • 2021-03-07
      • 1970-01-01
      • 2017-08-05
      • 2011-02-28
      • 1970-01-01
      • 2011-09-14
      相关资源
      最近更新 更多