【发布时间】:2016-07-01 10:57:57
【问题描述】:
我正在测试 cache-control 标头在 Chrome 上的工作方式。
我在nginx 中的设置非常简单:
server {
listen 80;
server_name localhost;
etag on;
root /usr/share/nginx/html;
location / {
add_header Cache-Control "must-revalidate, private, max-age=10";
}
}
我期望的设置行为是:
- max-age:在指定时间内使用缓存(以秒为单位)
- etag:用于验证数据的新鲜度
- private:避免使用代理缓存来保存数据
通过硬重新加载,我得到了预期的行为:
1- 第一次下载到服务器,返回数据为200
2- 第二次刷新(ctrl + R)访问服务器以验证新鲜度,如果未修改,则返回 304,如果数据已修改,则返回 200。 (似乎它从未从网络缓存中提供过。为什么?)
之前的行为大多是预期的,但使用back 和forward 按钮总是从网络缓存中检索数据。为什么是这样?为什么如果我修改了数据但使用back/forward 按钮我仍然从缓存中获取陈旧数据?即使我等待超过 10 秒,结果也是一样的。只需硬重新加载即可获得新数据。
【问题讨论】:
标签: google-chrome caching nginx cache-control