if-modified-since と if-none-match の比較
質問
if-modified-since と if-none-match の違いは何でしょうか?ファイルには if-none-match が使用されますが、ページには if-modified-since が使用されるような気がします。
解決
両者の違いについては、 Last-Modified/If-Modified-Since
そして ETag/If-None-Match
:
どちらも交換して使用できます。ただし、リソースの種類とサーバー上での生成方法によっては、どちらかの質問 (「これは ... 以降変更されましたか?」/「これはまだこの ETag と一致しますか?」) の方が答えやすい場合があります。 。
例:
- ファイルを提供している場合は、そのファイルの
mtime
としてLast-Modified
date は最も簡単な解決策です。 - 多数の SQL クエリから構築された動的 Web ページを提供している場合、それらのクエリのいずれかによって返されたデータが変更されたかどうかを確認することは、非現実的である可能性があります (すべてのクエリに何らかの「最終更新日」列がある場合を除く)。この場合、例えばを使用します。ページコンテンツの md5 ハッシュ
ETag
ずっと簡単になります。
OTOH、これは、条件付き GET の場合でも、サーバー上でページ全体を生成する必要があることを意味します。ETag に正確に何を入力する必要があるかを把握する (主キー、リビジョン番号など)。など)ここで時間を大幅に節約できます。
このトピックの詳細については、次のリンクを参照してください。
他のヒント
If-Modified-Since
と比較されます Last-Modified
一方 If-None-Match
と比較されます ETag
. 。両方 Modified-Since
そして ETag
リソースの特定のバリアントを識別するために使用できます。
しかし、比較すると、 If-Modified-Since
に Last-Modified
キャッシュされたバリアントが 年上の または 新しい 一方、の比較 If-None-Match
に ETag
両方が正しいかどうかの情報を提供するだけです 同一 か否か。さらに、ほとんどのことを実行します。 ETag
ジェネレーターにはシステム固有の情報が含まれます。 i ノード そのため、ファイルを別のドライブに移動すると、 ETag
同じように。
Timestamp値 - 1秒と、それは単に高速な複数のメッセージがで掲載することができ、例えば、Webベースのチャットアプリケーションのために、などのコンテンツを変更するための十分ではありません任意の秒。 ETag /場合-なしマッチすると、その問題を解決するために助けることができます。
それはGoogleのベストプラクティスに記載されている通ります:
すべてのキャッシュ可能なリソースについて、有効期限が切れるかのCache-Controlの最大エージングの一つであり、変更、最終またはのETagのいずれかを指定することが重要です。有効期限とのCache-Controlの両方を指定することが冗長である:最大エージング、または、最終更新日やETagの両方を指定することを
https://developers.google.com/speed/docs/best-practices/caching
場合 - 変更-のでの日付を使用しています、しばらく の場合 - なし - マッチhref = "http://en.wikipedia.org/wiki/HTTP_ETag" のrel = "noreferrer">のETag の。彼らは両方の「ページ」(すなわち、HTML)や他のファイルに使用することができます。
のETagは強いバリと考えられるので、条件が要求を範囲satifyするために使用することができます。彼らは多くの場合、iノード情報および/または固有の永続的なカウンタを使用するので、ほとんど自動的に、サーバーファームの状況でてETag展示困難を生成。実際に、私はかなり静的コンテンツ、例えばために十分であると最終更新日時ヘッダを発見しましたファイルの書き込み時間が適度に良好なバリデータを作るために、保護された静的なコンテンツを提供する。
のETagは、これまでで最も柔軟性があります。彼らが利用可能な場合の両方を送るべきであるのに対し、準拠のクライアントは、条件付きリクエストでのETagを送信するために必要とされます。
もし修飾-ので、ヘッダは、ブラウザが最後に要求されたリソースを受信した時刻を指定するために使用されます。 If-None-Matchヘッダは、それが最後に受信されたときに、サーバーが要求されたリソースを発行したエンティティタグを指定するために使用されます。
むしろ、リソースの完全な内容で応答するよりも、リソースのキャッシュされたコピーを使用するために、は説明した2つの方法では、これらのヘッダは、ブラウザ内のコンテンツのキャッシュをサポートするために使用されている、と彼らは、ブラウザに指示するためにサーバーを有効にこれは必要ではない場合。