2015-09-08 75 views
1

我無法讓max-age緩存控制正常工作, 我使用expires_in導致「Cache-Control:max-age = 86400,public,必須重新驗證「標題。expires_in max-age緩存控制不起作用

但是,瀏覽器仍然向服務器發送請求,至少它被定義爲「304未修改」,這意味着ETag/If-None-Match標頭能正常工作。

我用我的本地主機上的webrick和heroku上的webrick進行了測試,用Chrome 45和Safari對 進行了測試。

不,我的開發工具沒有打開,並且「禁用緩存」未被選中。

我也嘗試刪除expires_in方法調用的「,must_revalidate:true」。

我錯過了什麼?

這裏是從網絡中鉻的輸出: 一般: 遠程地址:127.0.0.1:3000 請求URL:http://localtest.me:3000/api/books 請求方法:GET 狀態代碼:304未修改

響應頭文件: 訪問控制允許來源:* 訪問控制請求方法:* 緩存控制:max-age = 86400,公共,必須重新驗證 連接:保持活動 日期:2015年9月8日星期二13:28:01 GMT Etag:W /「1f1b2d0b822830bc74e7c47a116205be」 服務器:WEBrick/1.3.1(Ruby/2.2.1/2015-02-26) X-Content-Type-選項:nosniff X-Frame-Options:SAMEORIGIN X-Request-Id:c70d4715-dcff-4558-85af-9d21556d406a X-Runtime:0.553353 X-Xss-Protection:1;模式=塊

請求報頭: 接受:text/html的,應用/ XHTML + xml的,應用/ XML; Q = 0.9,圖像/ WEBP,/; Q = 0.8 接受編碼:gzip ,deflate,sdch Accept-Language:zh-CN,en; q = 0.8,fr; q = 0.6,he; q = 0.4 Cache-Control:max-age = 0 連接:保持活動 主機:localtest .me:3000 User-Agent:Mozilla/5.0(Macintosh; Intel Mac OS X 10_10_3)AppleWebKit/537.36(KHTML,和Gecko一樣)如果無匹配:W /「1f1b2d0b822830bc74e7c47a116205be」 升級 - 不安全 - 請求:1 Chrome/45.0.2454.85 Safari/537 0.36

這裏是Ruby代碼:

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

回答

1

好了,頭都很好,它只是一個瀏覽器的如何對待刷新按鈕或快捷鍵米。

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

下面是在Chrome中發現:按輸入地址欄上尊重「最大年齡」和

  1. 不發送請求到服務器。
  2. 的重新加載按鈕或Cmd的+ R 發送到服務器的請求與的If-Modified-由於和將返回304,如果資源沒有因爲改性...
  3. 爲Cmd + Shift + R 發送一個請求到服務器甚至沒有如果修改自從