40

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

Expiresとヘッダーの違いは何ですか?Last-ModifiedまたETag、どの状況でどちらを使用する必要がありますか?

4

2 に答える 2

57

ExpiresそしてCache-Control「強力なキャッシングヘッダー」です

Last-ModifiedそしてETag「弱いキャッシングヘッダー」です

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

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

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

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

于 2014-03-05T04:26:46.620 に答える
31

Expiresヘッダーを組み合わせて使用​​できますが、他の2つには関係ありません。プロキシとブラウザキャッシュによって広くサポートされています。

ETagとスタンプの違いLast-Modifiedはより意味的です。ETagはクライアントに対して不透明です。通常はチェックサムです。一方、Last-Modifiedヘッダーは、クライアントが解釈できます。最後に変更されたタイムスタンプは線形に機能することが理解されています。

ブラウザが。を使用してリソースを要求した場合If-Unmodified-Since、過去のさまざまなタイムスタンプがそのような条件に一致する可能性があります。ページが頻繁に変更される場合は、最終変更のタイムスタンプが有利な場合があります。

一方、ETagアプローチでは、リソースごとに最後の1つのフィンガープリントを保存するクライアントにつながります。(ブラウザのキャッシュが複数のETagを記憶しているかどうかはわかりません)。リクエストに応じて、1つまたはいくつかの可能なIf-None-Matchトークンのみがリストされます。これは、より多くのミスを意味する可能性があります。また、複数のチェックサムを比較する必要がありますが、Last-Modifiedタイムスタンプを使用すると、算術比較を行うことができます。

ETagの本当の利点は、指紋を確実に比較できることです。最終変更のタイムスタンプは、実際のページコンテンツが変更されたかどうかを確認しないため、もう少しあいまいです。

参照:

于 2011-03-16T06:58:04.213 に答える