什么HTTP响应头是必需的

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

我正在努力优化HTTP响应头,以最大限度地减lessHTTP响应开销。 我知道“开销”有点夸张,但我喜欢干净的输出。

我看到很多网站,发送冗余caching标题。

例如

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

  • 资源
  • HTTP / 1.1:标题字段定义

这取决于你所需要的定义:不pipe情况如何,每个响应都不必发送头字段,但是你真的应该发送头字段。 唯一接近的标题字段是Date ,但是即使它具有不需要的情况。

按照RFC 2119的说法,术语“ 必须”意味着某种东西是规范的要求,不符合要求将是无效的。 在所有情况下 , RFC 7230,7231,7232,7233,7234或7235都没有规定由源服务器发送的头字段。


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

7.1.1.2。 date

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

请注意报价的最后一句。 如果原始服务器能够提供UTC的date的“合理近似”,则必须发送“ Date标题字段,但是没有任何事情阻止服务器误传自己。

7.4.2。 服务器

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

3.3.2。 内容长度

除了[有限数量的预定义情况]之外,在没有Transfer-Encoding的情况下,源服务器应当在发送完整报头部分之前知道净荷主体大小时发送Content-Length报头字段。

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

3.1.1.5。 内容types

如果Content-Type头字段不存在,接收者可以采用媒体types的application/octet-stream (RFC2046,Section 4.5.1)或者检查数据来确定它的types。


有些情况下可能需要特定的头文件,例如:

  • 不支持持续连接的起源服务器必须在没有1xx状态码的每个响应中发送Connection: close
  • 源服务器必须在405(方法不允许)响应中生成Allow标题。
  • 生成401(未授权)响应的源服务器必须发送至less包含一个质询的WWW-Authenticate头域。

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

  • date
  • 内容types
  • 服务器

和Content-Length,Transfer-Encoding或Connection:closures。

如果你想caching,添加caching控制(例如,与最大年龄); 过期通常不再需要。 如果您希望客户端能够validation,请添加Last-Modified或ETag。