需要从服务器向客户端发送哪些HTTP响应标头?
我致力于优化HTTP响应头以最小化HTTP响应开销。我知道“开销”有点夸张,但我喜欢干净的输出。
我看到很多网站发送冗余缓存标头。
e.g。
指定Expires
和Cache-Control: max-age
,或指定Last-Modified
和ETag
都是多余的。
答案 0 :(得分:55)
这取决于您定义的所需内容:无论在什么情况下都没有必须与每个响应一起发送的头字段,但是您确实应发送的头字段。接近的唯一标题字段是Date
,但即使它有不需要的情况。
在RFC 2119的说法中,术语必须表示某些内容是规范的要求,而不满足要求则无效。 RFC <{3}},7230,7231,7232,7233或7234定义的标头字段必须< / strong>在所有情况下由原始服务器发送。
例如,可以省略以下标题(尽管您可能应该发送它们):
如果不是,原始服务器绝不能发送
Date
标题字段 有一个时钟能够提供合理的近似值 协调世界时的当前实例。原始服务器可以 如果响应在1xx中,则发送Date
标头字段 (信息)或5xx(服务器错误)类状态代码。一个 原始服务器必须在所有其他情况下发送Date
标题字段。
请注意报价的最后一句。如果原始服务器能够以UTC格式提供日期的“合理近似值”,则会发送Date
标题字段必须,但没有任何事情可以阻止服务器歪曲自己。
原始服务器可以在其响应中生成
Server
字段。
除了[有限数量的预定义案例],在没有的情况下
Transfer-Encoding
,原始服务器应该发送Content-Length
在发送之前已知有效负载主体大小的头字段 完整标题部分。
关于Content-Length
和Transfer-Encoding
的主题,请注意两者都不能发送,在这种情况下,响应的长度“由服务器关闭连接之前接收的八位字节数决定。“
如果不存在
Content-Type
标头字段,则为收件人 可以假设媒体类型为application/octet-stream
(RFC2046,第4.5.1节)或检查数据以确定其类型。
在某些情况下,可能需要特定的标头,例如:
答案 1 :(得分:22)
这取决于响应的具体情况,但通常来自原始服务器的响应应具有:
和Content-Length,Transfer-Encoding或Connection:close。
如果要进行缓存,请添加Cache-Control(例如,使用max-age);过期通常不再需要。如果您希望客户能够验证,请添加Last-Modified或ETag。