web-dev-qa-db-ja.com

使用するもの:Expireヘッダー、Last Modifiedヘッダー、またはETag

私はApacheでPHP=を実行しています。サイトのロードを高速化するためにサーバー側のキャッシュを実装する方法について混乱しています。

ExpiresLast-ModifiedETagヘッダーの違いは何ですか、またどのような状況でどのヘッダーを使用する必要がありますか?

33
Avinash

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タイムスタンプは、実際のページコンテンツが変更されたかどうかを確認しないため、少しあいまいです。

以下も参照してください。

23
mario

ExpiresおよびCache-Controlは「強力なキャッシュヘッダー」です

Last-ModifiedおよびETagは「弱いキャッシングヘッダー」です

最初にブラウザはExpires/Cache-Controlをチェックして、サーバーにリクエストを送信するかどうかを決定します。

リクエストを行う必要がある場合は、HTTPリクエストでLast-Modified/ETagを送信します。ドキュメントのEtag値がそれに一致する場合、サーバーは200ではなく304コードを送信し、コンテンツは送信しません。ブラウザはキャッシュからコンテンツをロードします。

強力なキャッシングヘッダーの1つと、弱いキャッシングヘッダーの1つを使用することをお勧めします。

39
hienbt88