我的Nginx中有一个配置如下的资源:
location ~ foo\.js$ {
add_header Cache-Control public;
expires 1d;
}
如果我用Firebug打开它并查看它显示的标题:
Cache-Control max-age=86400, public
该网站正在使用HTTPS,所以我想确保我做对了,因为显然浏览器不会缓存它,除非它的max-age> 0和public
。 See this
但是当我使用curl -Ik https://...
时,我的Nginx会发生什么呢?它说:
...
Expires: Sat, 22 Jan 2011 18:23:36 GMT
Cache-Control: max-age=86400
Cache-Control: public
...
重复Cache-Control
标题!萤火虫显然不介意。但这是对的吗?
是否有更好的方法可以在一两行中设置Expires
和Cache-Control
(public
}?
答案 0 :(得分:30)
是的,它有效且相当于使用多个Cache-Control标头。
多个消息标题字段 可能存在相同的字段名称 当且仅当整个 该标题字段的字段值是 定义为以逗号分隔的列表 [即#(值)]。它必须是可能的 组合多个标题字段 成为一个“字段名称:字段值” 对,不改变语义 通过附加每个消息 后续的字段值到第一个, 每个用逗号分隔。
由于how it's defined,很容易验证此规定是否适用于Cache-Control标头:
Cache-Control =“Cache-Control”“:”1#cache-directive
要了解如何解释上述行,请参阅规范notational conventions。 1#
表示“以逗号分隔的一个或多个列表”。
答案 1 :(得分:6)
我在不同的配置上遇到了同样的问题。对我有用的是在“服务器”打开括号之后更改设置标题和放置标题设置的两行的顺序。这会将标题设置为所有对象,但也许可以在你的“if”语句中使用:
server {
expires 31d;
add_header Cache-Control public;
server_name example.com
...
}
似乎add_header在expires指令之前发送标头以便有时间更改它。