【问题标题】:expires_in max-age cache control doesn't workexpires_in max-age 缓存控制不起作用
【发布时间】:2015-12-04 06:34:37
【问题描述】:

我无法让 max-age 缓存控件正常工作, 我使用了expires_in,它产生了“Cache-Control:max-age=86400, public, must-revalidate”标头。

但是,浏览器仍然向服务器发送请求,至少定义为“304 未修改”,这意味着 ETag/If-None-Match 标头正常工作。

我已经在我的本地主机和 heroku 上使用 webrick 对其进行了测试, 使用 chrome 45 和 Safari。

不,我的开发工具没有打开,“禁用缓存”也没有勾选。

我也尝试删除 expires_in 方法调用的“, must_revalidate: true”。

我错过了什么?

以下是 chrome 中网络的输出: 一般: 远程地址:127.0.0.1:3000 请求网址:http://localtest.me:3000/api/books 请求方法:GET 状态码:304 未修改

响应标头: 访问控制允许来源:* 访问控制请求方法:* Cache-Control:max-age=86400, public, must-revalidate 连接:保活 日期:格林威治标准时间 2015 年 9 月 8 日星期二 13:28:01 Etag:W/"1f1b2d0b822830bc74e7c47a116205be" 服务器:WEBrick/1.3.1 (Ruby/2.2.1/2015-02-26) X-Content-Type-Options:nosniff X 框架选项:SAMEORIGIN X 请求 ID:c70d4715-dcff-4558-85af-9d21556d406a X-运行时:0.553353 X-Xss-保护:1;模式=块

请求标头: 接受:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8 接受编码:gzip、deflate、sdch 接受语言:en-US,en;q=0.8,fr;q=0.6,he;q=0.4 缓存控制:max-age=0 连接:保持活动 主机:localtest.me:3000 If-None-Match:W/"1f1b2d0b822830bc74e7c47a116205be" 升级不安全请求:1 用户代理:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36

这里是 ruby​​ 代码:

before_action :cache_control, only: [:index, :show]
def cache_control
  expires_in 1.day, public: true, must_revalidate: true
end

【问题讨论】:

    标签: ruby-on-rails caching browser-cache cache-control


    【解决方案1】:

    嗯,标题很好,它只是浏览器如何处理重新加载按钮或快捷键的米。

    我在这里找到了答案:https://stackoverflow.com/a/16510707/789658

    以下是 chrome 中的发现:

    1. 在地址栏上按 Enter 会遵守“max-age”,并且不会向服务器发送请求。
    2. 重新加载按钮或 Cmd+R 发送一个请求到服务器 If-Modified-Since 如果资源没有被修改,将返回 304...
    3. Cmd+Shift+R 发送请求到服务器甚至没有If-Modified-Since

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-16
      • 2011-02-25
      • 2012-11-21
      • 2018-05-08
      • 1970-01-01
      • 2012-12-02
      • 2018-04-14
      • 2020-12-19
      相关资源
      最近更新 更多