需要什么 HTTP 响应头

从服务器发送到客户端需要什么 HTTP 响应头?

我致力于优化 HTTP 响应头,以最小化 HTTP 响应开销。我知道“开销”有点夸张,但我喜欢干净的输出。

我看到很多网站发送冗余的缓存头,等等..。

例如:。

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

  • 来源
  • HTTP/1.1: 头字段定义
55167 次浏览

这取决于响应的细节,但一般来说,来自原始服务器的响应应该具有:

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

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

如果你想进行缓存,添加 Cache-Control (例如,使用 max-age) ; 通常不再需要过期。如果您希望客户端能够验证,添加最后修改或 ETag。

它取决于您所定义的必需内容: 没有必须随每个响应一起发送的头字段,无论情况如何,但是有一些头字段是您真正 应该发送的。唯一接近的头字段是 Date,但是即使在这种情况下也不需要它。

RFC 2119的说法,术语 必须的意味着某些东西是规范的要求,不符合要求将是无效的。没有由原始服务器 无论如何发送的由 RFC 723072317232723372347235定义的头字段。


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

7.1.1.2. 日期

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

注意引文的最后一句。如果原始服务器能够提供以 UTC 表示的日期的“合理近似值”,则发送 Date头字段 必须的,但是没有什么能够阻止服务器误报自己。

7.4.2. 服务器

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

3.3.2内容-长度

除了[有限数量的预先定义的情况] ,在没有 原始服务器应该发送一个 Content-Length 属性之前已知有效负载体大小时,返回 完整的页眉部分。

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

3.1.1.5. 内容类型

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


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