ブラウザが最初のページリクエストでキャッシュヘッダーを尊重しないのはなぜですか?


8

これで頭を少し引っ掻いています。私が実行しているDrupalサイトは、ページを15分間キャッシュできることを示す適切なキャッシュヘッダーを設定しています。ただし、ページにアクセスするたびに、キャッシュからページをロードするのではなく、常にGETリクエストを送信します。

私は毎回ページを強制的に更新しているわけではありません。キャッシュをフラッシュしたいことをブラウザに示していると思います。開発者モードのキャッシュ無効化を有効にしていません。

これはブラウザのデフォルトの動作ですか、それとも明らかなものがないのですか?FireFox開発ツールのホームページにアクセスしたときのリクエスト/レスポンスヘッダーは次のとおりです。

注/編集:これはExpires過去のヘッダーに関連していると示唆する人もいます。ただし、RFC 2616、Sec 14.9.3に記載されいるようCache-ControlExpires、は何もオーバーライドします。Drupalにはこれが含まれ、Drupalが適切なキャッシュに必要とするより高度なヘッダーをサポートしていない古いHTTP 1.0クライアントでのキャッシュを無効にします。Vary

ここに画像の説明を入力してください

回答:


11

あなたは持っているヴァリ:クッキーは、受け入れるエンコード応答ヘッダーを。これはかなりの手段その場合(ブラウザを含む)プロキシは、すべての可能性が修正クッキーvlaueのための新しいバージョンをキャッシュするために準備する必要があり、このページをキャッシュしたい(またはChangsの中に受け入れをコードします)。特に、Cookieを最初の場所に記録しておく必要があります。これは、Cookieが要求で送信されたときに、それを区別基準として使用するためです。私は、Cookieが大きすぎる(したがって、繰り返される可能性が低い)場合にブラウザーがこれを拒否するか、またはキャッシュコンテンツを介してCookie情報が漏洩しないようにするために拒否するか、単にすべてのCookieコンテンツが変更されることを想像できますコール。


4
私もこの結論に達したとき、私自身の質問に答えようとしていました。GoogleアナリティクスのCookieを持っていますが、その1つが各ページリクエストで変更され、ページがキャッシュされません。
ブライアン

2

CMSプログラムでは、ユーザーの要求に固有の動的コンテンツを表示するために、一部のページでデータベースとの対話が必要です。ページ全体をキャッシュできないか、ユーザーに正しいコンテンツが表示されません。

実際のこの例は、eコマースのショッピングカート/チェックアウトページです。ページは毎回違って見えるので、完全にキャッシュする方法はありません。特定のページの詳細を知らなければ、参照しているページにデータベースの関与が必要かどうかを知ることは困難です。


それは事実ですが、Drupalのページキャッシングメカニズム(文字列全体のHTML出力をキャッシュし、「匿名の」トラフィックにそれを配信します)には当てはまりません。私の質問は、ブラウザーが設定されている適切なページキャッシュヘッダーに正しく反応しないように見える(画像を参照)ことについてです。
ブライアン

以前デバッグ中にこれを見たことがありますが、思い出せません。応答ヘッダーにExpires:Nov 1978と表示される正当な理由はありますか?それともあなたの答えかもしれません。
JMC

1
Drupalのコードでは、ヘッダーの上のコメントに次のように書かれています。 max-age =ディレクティブが指定されている(RFC 2616、セクション14.9.3を参照)。日付は特にDrupalの誕生日の作成者です。
ブライアン

Expiresが一致しないのはまだ奇妙です。たとえば、Last-modifiedおよびmax-age
Hagen von Eitzen

-1

他の回答に加えて、Expiresヘッダーは過去のものです。これも、ブラウザーがページをキャッシュしない理由の1つです。


これは、Cache-Controlヘッダーが存在する場合には当てはまりません。ExpiresHTTP 1.1クライアントのヘッダーをオーバーライドします。ietf.org/rfc/rfc2616.txt、セクション14.9.3を参照してください。
ブライアン、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.