【问题标题】:Cache-Control headers repeated; valid or not? (Nginx)Cache-Control 标头重复;有效与否? (Nginx)
【发布时间】:2011-06-13 08:08:51
【问题描述】:

我的 Nginx 中有一个资源配置如下:

location ~ foo\.js$ {
    add_header Cache-Control public;
    expires 1d;
}

如果我用 Firebug 打开它并查看标题,它会显示:

Cache-Control   max-age=86400, public

该站点正在使用 HTTPS,因此我想确保它正确,因为显然浏览器不会缓存它,除非它的 max-age>0 AND publicSee this

但是当我使用curl -Ik https://... 时,我的 Nginx 会发生什么情况:

...
Expires: Sat, 22 Jan 2011 18:23:36 GMT
Cache-Control: max-age=86400
Cache-Control: public
...

它重复了Cache-Control 标头!显然 Firebug 并不介意。但这样做对吗?

是否有更好的方法将ExpiresCache-Control(与public)设置在两行中?

【问题讨论】:

  • 您确定需要 max-age 和 public 吗?根据规范 (w3.org/Protocols/rfc2616/rfc2616-sec14.html),第 14.9.3 节指出“响应上的 max-age 指令意味着响应是可缓存的(即“公共”),除非还存在其他一些更严格的缓存指令。 "

标签: nginx cache-control


【解决方案1】:

是的,使用多个 Cache-Control 标头是有效且等效的。

来自HTTP 1.1 spec

多个消息头字段 相同的字段名可能出现在 当且仅当整个消息 该标头字段的字段值是 定义为逗号分隔的列表 [即,#(值)]。必须是可能的 组合多个标题字段 成一个“字段名:字段值” 对,不改变语义 的消息,通过附加每个 第一个的后续字段值, 每个用逗号分隔。

很容易验证此规定是否适用于 Cache-Control 标头,因为how it's defined

Cache-Control = "Cache-Control" ":" 1#cache-directive

要了解如何解释上面的行,请参阅规范的notational conventions1# 表示“一个或多个逗号分隔的列表”。

【讨论】:

  • 所以,它基于 HTTP 规范是有效的,但真正的问题是流行的浏览器和代理如何处理多个 Cache-Control 标头?最新最好的可能会正确处理它,但是当您的缓存控制标头设置有任何“不寻常”时,Firefox 似乎不会缓存。有人有一个很好的测试链接吗?如果已经完成,我讨厌自己做;-)
  • 我在阅读规范时错过的符号约定是 1#cache-directive 表示一个或多个缓存指令的逗号分隔列表。所以要缩小范围,请参阅notational conventions中的“#rule”
【解决方案2】:

我在不同的配置上遇到了同样的问题。 这是目前对我有用的方法。

示例取自Module ngx_http_headers_module

map $sent_http_content_type $expires { default off; text/html epoch; text/css max; application/javascript max; application/octet-stream max; ~image/ max; } server { expires $expires; .... }

【讨论】:

  • 不完全是问题的答案,但高度相关,IMO。
  • 另外它不再工作了``` Cache-Control: max-age=3600\n Cache-Control: private, must-revalidate, proxy-revalidate, max-age=3600`` ` config 说:`` 过期 1 小时;\n add_header Cache-Control "private, must-revalidate, proxy-revalidate, max-age=3600";```(抱歉格式化)
猜你喜欢
  • 2018-12-10
  • 1970-01-01
  • 2017-09-11
  • 1970-01-01
  • 2015-04-13
  • 2020-09-15
  • 2011-09-08
  • 1970-01-01
  • 2015-08-19
相关资源
最近更新 更多