儘管在回應標頭中從伺服器發送了 no-cache、no-store、must-revalidate,但我的瀏覽器仍然顯示快取頁面

儘管在回應標頭中從伺服器發送了 no-cache、no-store、must-revalidate,但我的瀏覽器仍然顯示快取頁面

我們頁面上的內容不斷變化,因此我們不希望瀏覽器快取頁面或顯示快取頁面或我們的使用者。但是,儘管在回應標頭中從伺服器發送了 no-cache、no-store、must-revalidate,但瀏覽器仍然顯示快取的頁面。這真是令人沮喪。我們有成千上萬的用戶,他們都在閱讀舊新聞!

我們正在使用客戶端 js 模板(handlebars js)從伺服器讀取數據並渲染頁面,但瀏覽器不斷向用戶顯示最後渲染的頁面,而 Handlebars 既不從伺服器讀取新數據,也不更新內容。可能出什麼問題了?

如果我按shift重新加載,那麼瀏覽器確實會顯示新內容,但我不能要求或期望我的用戶每次加載我們的頁面時都這樣做。

有人可以提供有用的指點嗎?

200 好

響應頭:

Accept-Ranges: bytes
Cache-Control: no-cache, no-store, must-revalidate
Connection: keep-alive
Content-Length: 12229
Content-Type: text/html
Date: Fri, 14 Aug 2020 09:08:10 GMT
ETag: "1e9602c3ddcf81c338fa4194c61ea035"
Last-Modified: Fri, 07 Aug 2020 12:38:22 GMT
Server: nginx/1.19.1
Strict-Transport-Security: max-age=0; includeSubDomains
Vary: Origin, Access-Control-Request-Headers, Access-Control-Request-Method
x-amz-request-id: tx00000000000004b9d2b06-005f36547a-ab8956-ams3b
x-rgw-object-type: Normal

請求標頭:

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: en-GB,en-US;q=0.9,en;q=0.8
Cache-Control: max-age=0
Connection: keep-alive
Cookie: _ga=GA1.1.709310680.1596978913; _gid=GA1.1.2045080055.1596978913
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36
(index):48 [Violation] Avoid using document.write(). https://developers.google.com/web/updates/2016/08/removing-document-write

我們正在執行 http GET,因為 nginx 前面會有 cloudflare,它將執行 tls 終止並對我們的 nginx 執行正常的 http get。我不敢想像一旦我們在 cloudflare 上上線,cloudflare 快取還會引入哪些其他快取問題。我們需要在幾天內上線,並且需要在將此版本投入生產之前解決這個問題。將不勝感激在這方面的快速幫助來解決上述問題。提前致謝。

答案1

您已使用過快取控制指令它們相互衝突,因此瀏覽器必須決定遵守哪些指令以及忽略哪些指令。

具體來說,您使用了:

  • no-cache。這實際上允許快取回應,儘管它立即被標記為過時,並且總是透過來源伺服器重新驗證。
  • must-revalidate:僅意味著過時的快取文件必須透過來源伺服器重新驗證。 so所暗示的no-cache在這裡沒有額外的效果。
  • no-store:不緩存響應。

當你說不緩存它並且緩存它也可以時,瀏覽器會做什麼?

如果您不希望快取回應,請使用僅有的 no-store。不要使用其他兩個 Cache-Control 指令。

相關內容