[解決済み] Cache-Control: privateとは何ですか?
質問
にアクセスすると chesseng.herokuapp.com 次のようなレスポンスヘッダが表示されます。
Cache-Control:private
Connection:keep-alive
Content-Encoding:gzip
Content-Type:text/css
Date:Tue, 16 Oct 2012 06:37:53 GMT
Last-Modified:Tue, 16 Oct 2012 03:13:38 GMT
Status:200 OK
transfer-encoding:chunked
Vary:Accept-Encoding
X-Rack-Cache:miss
と表示され、ページを更新すると
Cache-Control:private
Connection:keep-alive
Date:Tue, 16 Oct 2012 06:20:49 GMT
Status:304 Not Modified
X-Rack-Cache:miss
ということで、キャッシュが効いているようです。もしそれがキャッシュのために機能するならば、何のために 期限切れ と キャッシュ制御:max-age . さらに混乱を招いたのは、このページを https://developers.google.com/speed/pagespeed/insights/ というメッセージが表示され、ブラウザのキャッシュを利用するように指示されます。
解決方法を教えてください。
ウェブサーバーがヘッダーを含んでいないにもかかわらず、なぜキャッシュが機能するのかという質問にお答えします。
-
期限切れになります。
[a date]
-
Cache-Control:
max-age=
[seconds]
サーバは親切にも、中間プロキシにコンテンツをキャッシュしないよう依頼しました (つまり、この項目は プライベート キャッシュ、つまり自分自身のローカルマシンのみ)。
- キャッシュコントロール:プライベート
しかし、サーバーはキャッシュのヒントのようなものを入れ忘れたのです。
- を入れ忘れた。 有効期限 (ブラウザはキャッシュされたコピーをその日付まで使用することを知る)
- を入れ忘れた。 最大年齢 (ブラウザがキャッシュされたアイテムの有効期限を知ることができるように)
- を入れ忘れた。 Eタグ (ブラウザが条件付きリクエストを行えるように)
しかし、彼らは した を含む。 最終修正時刻 の日付がレスポンスに含まれます。
Last-Modified: Tue, 16 Oct 2012 03:13:38 GMT
ブラウザはファイルが更新された日付を知っているので、その日付に対応した 条件付きリクエスト . これはサーバーにファイルを要求しますが、2012/10/16 3:13:38以降に変更されたファイルのみを送信するようにサーバーに指示します。
GET / HTTP/1.1
If-Modified-Since: Tue, 16 Oct 2012 03:13:38 GMT
リクエストを受け取ったサーバーは、クライアントがすでに最新版を持っていることに気づきます。クライアントに
200 OK
その代わりに、キャッシュされたバージョンは良好であることを伝えるのです。
304 Not Modified
ご利用のブラウザ した。 は、サーバーにリクエストを送信し、レスポンスを待つという往復の遅れはありますが、静的コンテンツを再ダウンロードする手間が省けました。
なぜ マックスエイジ ? なぜ 期限切れ ?
なぜなら 最終修正日 は吸う。
サーバーにあるもの全てではありません があります。 には、それに関連する日付があります。その場でページを作っていると、日付が関連付けられていない - それは 今 . でも、ユーザーがホームページを15秒間キャッシュできるようにするのは、まったく構わないんです。
200 OK
Cache-Control: max-age=15
もしユーザーが F5 キャッシュされたバージョンを15秒間取得し続けることになります。もしそれが企業のプロキシであれば、同じ15秒間に同じページを訪れた67,198人のユーザーは、すべて同じコンテンツを入手することになります。すべてのユーザーにパフォーマンスの向上がもたらされます。
を追加することの利点は
Cache-Control: max-age
は、ブラウザが
ある
を実行する必要があります。
-
のみを指定した場合
Last-Modified
を実行する必要があります。If-Modified-Since
をリクエストし304 Not Modified
応答 -
を指定した場合
max-age
ブラウザはネットワークのラウンドトリップを受けることもなく、コンテンツはキャッシュから直接取得されます。
Cache-Control: max-ageとExpiresの違い。
Expires
は、レガシー (1998年頃) である現代の
Cache-Control: max-age
ヘッダがあります。
-
Expires
: 日付を指定する (ヤバイ) -
max-age
秒を指定した場合 (良し) -
そして、もし 両方 が指定された場合、ブラウザは
max-age
:200 OK Cache-Control: max-age=60 Expires: 20180403T192837
1998年以降に作成されたウェブサイトは
Expires
を使用し、代わりに
max-age
.
ETagとは何ですか?
ETag
は
最終更新日
ただし、日付である必要はなく、単に
something
.
データベースから商品のリストを取り出す場合、サーバーは最後の
rowversion
を日付ではなく、ETagで指定します。
200 OK
ETag: "247986"
私の ETag は、静的リソース(例:画像、js、css、フォント)の SHA1 ハッシュ、またはキャッシュされたレンダーページ(例:これは Mozilla MDN wiki が行っていることです;彼らは最終マークアップをハッシュ化しています)のハッシュです。
200 OK
ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4"
という条件付きリクエストの場合と全く同じです。 最終更新日 :
GET / HTTP/1.1
If-Modified-Since: Tue, 16 Oct 2012 03:13:38 GMT
304 Not Modified
を実行することができるんだ。 条件付きリクエスト をETagを元に作成します。
GET / HTTP/1.1
If-None-Match: "33a64df551425fcc55e4d42a148795d9f25f89d4"
304 Not Modified
An
ETag
よりも優れています。
Last-Modified
以外のものに対して機能するからです。
ファイル
の概念を持つもの、あるいは
日付
. それはただ
は
関連
-
[解決済み] HTTPステータスコード0 - Error Domain=NSURLErrorDomain?
-
[解決済み] 正しいJSONコンテンツタイプは何ですか?
-
[解決済み] ブラウザによって異なるURLの最大長とは?
-
[解決済み] URI、URL、URNの違いは何ですか?
-
[解決済み] ウェブサイト制作のためのChromeキャッシュの無効化
-
[解決済み] Cache-Control: max-age=0とno-cacheの違いは何ですか?
-
[解決済み】HTTPのPOSTとPUTの違いは何ですか?
-
[解決済み】全てのブラウザで、Webページのキャッシュを制御するには?
-
[解決済み】enctype='multipart/form-data'とはどういう意味ですか?
-
[解決済み] HTTPのPOSTメソッドをキャッシュすることは可能ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] HTTPの "Host "ヘッダーとは何ですか?
-
[解決済み] HTTPステータスコード0 - Error Domain=NSURLErrorDomain?
-
[解決済み] HTTP POSTリクエストでは、どのようにパラメータが送信されるのですか?
-
[解決済み] 検証失敗または重複が無効な場合のREST HTTPステータスコード
-
[解決済み] Cache-Control: max-age=0とno-cacheの違いは何ですか?
-
[解決済み】no-cacheとmust-revalidateの違いについて
-
[解決済み】HTTPの "Content-Type "ヘッダーのすべての可能な値は何ですか?
-
[解決済み] PragmaヘッダーとCache-Controlヘッダーの違い?
-
[解決済み] URLマトリックスパラメータとクエリパラメータの比較
-
[解決済み] 304 Not Modified」は具体的にどのように機能するのですか?