応答ヘッダーでサーバーから 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

​ nginx の前に cloudflare があり、tls ターミネーションを実行して、nginx に通常の http get を実行するため、http GET を実行しています。cloudflare で稼働したら、cloudflare キャッシュによって他のキャッシュの問題が発生するのではないかと考えると恐ろしいです。数日以内に稼働する必要があり、このバージョンで本番稼働する前にこれを解決する必要があります。上記の問題を解決するために、この点に関して迅速な支援をいただければ幸いです。よろしくお願いします。

答え1

使用しましたキャッシュ制御ディレクティブこれらは互いに競合するため、ブラウザはどの指示に従い、どの指示を無視するかを決定する必要があります。

具体的には以下を使用しました:

  • no-cacheこれにより、応答は実際にキャッシュされますが、すぐに古いものとしてマークされ、常に元のサーバーで再検証されます。
  • must-revalidate: 古くなったキャッシュされたドキュメントを元のサーバーで再検証する必要があることのみを意味します。no-cacheso によって暗示される追加の効果はありません。
  • no-store: 応答をキャッシュしません。

キャッシュしないように指定されているのに、キャッシュしても問題ない場合、ブラウザはどのような動作をするのでしょうか?

レスポンスをキャッシュしたくない場合は、のみ no-store他の 2 つの Cache-Control ディレクティブは使用しないでください。

関連情報