web-dev-qa-db-ja.com

HTTP Cache Control max-age、must-revalidate

Cache-Controlに関連するクエリがいくつかあります。

静的html/js/images/cssファイルにCache-Control max-age=3600, must-revalidateを指定し、HTTPヘッダーに最終変更ヘッダーが定義されている場合:

  1. ブラウザ/プロキシキャッシュ(Squid/Akamaiなど)は、Originサーバーまでずっと検証しますmax-age expires?または、max-ageが期限切れになるまでキャッシュからコンテンツを提供しますか?
  2. 最大有効期限(キャッシュからの有効期限)の後、If-Modified-Sinceチェックがありますか、またはコンテンツがIf-Modified-SinceチェックなしでOriginサーバーから再ダウンロードされますか?
70
nyb

a)サーバーにこのヘッダーが含まれている場合:

Cache-Control "max-age=3600, must-revalidate"

クライアントキャッシュとプロキシキャッシュの両方に、コンテンツが古くなった(3600秒以上)場合、コンテンツを提供する前にOriginサーバーで再検証する必要があることを伝えています。これはキャッシングシステムのデフォルトの動作であるはずですが、must-revalidateディレクティブはこの要件を明確にします。

b)クライアントは再検証する必要があります。 ETagでIf-MatchまたはIf-None-Matchヘッダーを使用して再検証するか、日付でIf-Modified-SinceまたはIf-Unmodified-Sinceヘッダーを使用します。

53
james.garriss

a。 このページ の[統計]タブを見て、何が起こるかを確認します。

b。有効期限が切れると、ブラウザはサーバーでファイルが更新されているかどうかを確認します。そうでない場合、サーバーは304 Not Modifiedヘッダーと何もダウンロードされません。

Firebugまたは同様のツールの[Net]パネルを見ると、この動作を自分で確認できます。アドレスバーにURLを再入力し、HTTP要求の数とキャッシュが空の場合の要求の数を比較します。

4
Marcel Korpel

少なくとも2019年のWebブラウザでは、与えられた答えは間違っています。

「有効期限が切れると、ブラウザはファイルが更新されたかどうかをサーバーで確認します」<-trueではない

「Cache-Control:public、must-revalidate、max-age = 864000」で提供される静的ファイルがあり、両方ChromeとFirefoxは毎回リクエストを実行します(そして304 Not Modifiedを取得します毎回戻る)。

0
mhenry1384