私はApacheでPHP=を実行しています。サイトのロードを高速化するためにサーバー側のキャッシュを実装する方法について混乱しています。
Expires
、Last-Modified
、ETag
ヘッダーの違いは何ですか、またどのような状況でどのヘッダーを使用する必要がありますか?
Expires
ヘッダーは組み合わせて使用できますが、他の2つには関係ありません。プロキシとブラウザキャッシュによって普遍的にサポートされています。
ETag
スタンプとLast-Modified
スタンプの違いは、よりセマンティックです。 ETagはクライアントに対して不透明です。通常はチェックサムです。一方、Last-Modifiedヘッダーはクライアントが解釈できます。最後に変更されたタイムスタンプは直線的に機能することがわかります。
ブラウザがIf-Unmodified-Since
でリソースをリクエストすると、過去のさまざまなタイムスタンプがそのような条件に一致する可能性があります。ページが頻繁に変更される場合は、Last-Modifiedタイムスタンプが有利です。
一方、ETagアプローチは、リソースごとに最後の1つのフィンガープリントを保存するクライアントにつながります。 (ブラウザーのキャッシュが複数のETagを記憶しているかどうかはわかりません)。リクエスト時には、1つまたはいくつかの可能なIf-None-Match
トークンのみがリストされます。これはより多くのミスを意味するかもしれません。また、複数のチェックサムを比較する必要がありますが、Last-Modifiedタイムスタンプを使用すると、算術比較を行うことができます。
ETagの本当の利点は、指紋を確実に比較できることです。 Last-Modifiedタイムスタンプは、実際のページコンテンツが変更されたかどうかを確認しないため、少しあいまいです。
以下も参照してください。
Expires
およびCache-Control
は「強力なキャッシュヘッダー」です
Last-Modified
およびETag
は「弱いキャッシングヘッダー」です
最初にブラウザはExpires/Cache-Control
をチェックして、サーバーにリクエストを送信するかどうかを決定します。
リクエストを行う必要がある場合は、HTTPリクエストでLast-Modified/ETag
を送信します。ドキュメントのEtag
値がそれに一致する場合、サーバーは200ではなく304コードを送信し、コンテンツは送信しません。ブラウザはキャッシュからコンテンツをロードします。
強力なキャッシングヘッダーの1つと、弱いキャッシングヘッダーの1つを使用することをお勧めします。