繁体   English   中英

缓存控制头重复; 有效与否? (Nginx)

[英]Cache-Control headers repeated; valid or not? (Nginx)

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

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

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

Cache-Control   max-age=86400, public

该网站正在使用 HTTPS,所以我想确保我做对了,因为显然浏览器不会缓存它,除非它是 max-age>0 AND public 看到这个

但是当我使用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 )?

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

HTTP 1.1 规范

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

很容易验证此规定是否适用于 Cache-Control 标头,因为 如何定义的

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

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

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

来自模块 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;
        ....
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM