需要什么HTTP响应标头

时间:2011-01-18 16:36:35

标签: http http-headers httpresponse

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

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

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

e.g。

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

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

2 个答案:

答案 0 :(得分:55)

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

RFC 2119的说法中,术语必须表示某些内容是规范的要求,而不满足要求则无效。 RFC <{3}},72307231723272337234定义的标头字段必须< / strong>在所有情况下由原始服务器发送


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

7235

  

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

请注意报价的最后一句。如果原始服务器能够以UTC格式提供日期的“合理近似值”,则会发送Date标题字段必须,但没有任何事情可以阻止服务器歪曲自己。

7.1.1.2. Date

  

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

7.4.2. Server

  

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

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

3.3.2. Content-Length

  

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


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

答案 1 :(得分:22)

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

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

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

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