缓存控制头重复;有效与否?(Nginx)
我的Nginx中有一个配置如下的资源:缓存控制头重复;有效与否?(Nginx),nginx,cache-control,Nginx,Cache Control,我的Nginx中有一个配置如下的资源: location ~ foo\.js$ { add_header Cache-Control public; expires 1d; } 如果我用Firebug打开它并查看标题,它会显示以下内容: Cache-Control max-age=86400, public 该站点正在使用HTTPS,因此我想确保我正确使用它,因为很明显,除非它的最大年龄>0且公共,否则浏览器不会缓存它 但是当我使用curl-Ik时,我的Nginx会发生什
location ~ foo\.js$ {
add_header Cache-Control public;
expires 1d;
}
如果我用Firebug打开它并查看标题,它会显示以下内容:
Cache-Control max-age=86400, public
该站点正在使用HTTPS,因此我想确保我正确使用它,因为很明显,除非它的最大年龄>0且公共,否则浏览器不会缓存它
但是当我使用curl-Ik时,我的Nginx会发生什么呢https://...
是说:
...
Expires: Sat, 22 Jan 2011 18:23:36 GMT
Cache-Control: max-age=86400
Cache-Control: public
...
它重复缓存控制
标题!显然Firebug并不介意。但这是对的吗
是否有更好的方法将Expires
和Cache Control
(使用public
)设置为一行两行?是的,使用多个Cache Control头是有效且等效的
从:
具有多个消息头字段的
中可能存在相同的字段名
当且仅当整个
该标题字段的字段值为
定义为逗号分隔的列表
[即#(值)]。这一定是可能的
组合多个标题字段的步骤
合并为一个“字段名称:字段值”
pair,而不改变语义
通过将每个
第一个字段的后续字段值,
每个都用逗号分隔
很容易验证此规定是否适用于缓存控制标头,因为:
Cache Control=“Cache Control”“:“1#Cache指令
要了解如何解释上面的行,请参见规范的。1#
表示“一个或多个以逗号分隔的列表”。我在不同的配置上遇到了相同的问题。
这就是我目前的工作
从
因此,它基于HTTP规范是有效的,但真正的问题是流行的浏览器和代理如何处理多个缓存控制头?最新和最好的版本可能会正确地处理它,但Firefox尤其在缓存控制头设置有任何“不寻常”的地方时似乎不会缓存。有没有人能链接到一个好的测试?如果已经做了,我讨厌自己做;-)我在阅读规范时忽略了一个符号约定,即1#cache指令意味着一个或多个cache指令的逗号分隔列表。因此,要缩小范围,请参见中的“#规则”,您确定需要最大年龄和公共空间吗?根据规范(),第14.9.3节规定,“响应上的最大年龄指令意味着响应是可缓存的(即“公共”),除非还存在其他更严格的缓存指令。”这与问题的答案不完全一致,但具有高度相关性,IMO.它也不再工作了``缓存控制:max age=3600\n缓存控制:private,必须重新验证,代理重新验证,max age=3600``配置说明:``过期1h\n添加头缓存控制“私有,必须重新验证,代理重新验证,最大年龄=3600”``(很抱歉格式化)
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;
....
}