以下标头(来自静态媒体响应)不会导致在 Firefox 中进行缓存。在 Chrome 中他们这样做。
HTTP/1.1 200 OK
Server: nginx
Date: Sat, 22 Dec 2012 21:20:39 GMT
Content-Type: application/x-javascript; charset=utf-8
Last-Modified: Fri, 21 Dec 2012 19:28:54 GMT
Transfer-Encoding: chunked
Connection: keep-alive
Cache-Control: public, max-age=86400
Content-Encoding: gzip
我的静态内容 Nginx 服务器如下所示:
server {
listen 80;
server_name static.example.com;
# Logs
access_log /var/log/nginx/static.example.com.access.log;
error_log /var/log/nginx/static.example.com.error.log;
# Root
location / {
alias /var/www/app/deps/current/repo/src/example/static/;
add_header Cache-Control "public, max-age=86400";
}
}
我也尝试过使用expires 24h;
, 代替add_header ...
, 没有运气。
我在 Internet 上发现了许多类似的投诉,但没有解决方案,也没有任何关于为什么会这样的想法,除了一个人提到 Firefox 如何故意偏离处理 HTTP 1.1Cache-Control
标头的规范。
有没有办法让 Firefox 通过一个或多个标头缓存我的静态媒体?我不希望 75% 的服务器静态媒体请求来自 20% 的用户,仅仅因为 Firefox 被破坏了。
请注意,我使用的是具有默认设置的 Firefox 17.0.1,但安装了 Firebug 并打开了Net
选项卡。
更新:
相反,使用:
expires 1d;
add_header Cache-Control public;
导致标头包括:
Expires: Wed, 26 Dec 2012 19:54:20 GMT
Cache-Control: max-age=604800, public
这也不会导致 Firefox 缓存内容。
你如何确定 Firefox 没有缓存你的文件?
当
Last-Modified
响应中出现标头时,浏览器应该对带有If-Modified-Since
标头的同一 URL 发出所有后续请求,然后如果文件尚未被发送,来自服务器的响应可能仅包含标头(没有正文)修改自。IIRC,Gecko 还会查看
Last-Modified
日期的年龄。如果它是相对较新的,那么只有内容一直在变化并且必须经常重新请求(使用 aIf-Modified-Since
或类似内容)才有意义。另一方面,如果日期是数周、数月或数年之久,则内容可能会被缓存很长时间。另一件要看的事情:你的 Firefox 机器上的时区和时间真的正确吗?
请像nginx 文档中描述的那样尝试这种方式
所以我很好奇并尝试使用下面的配置缓存自己。我改变的是我在 localhost:4567 上启动了一个应用程序。而在外部网站中配置了 proxypass。或多或少像我能找到的大多数缓存示例。