質問

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-SinceLast-Modified キャッシュされたバリアントが 年上の または 新しい 一方、の比較 If-None-MatchETag 両方が正しいかどうかの情報を提供するだけです 同一 か否か。さらに、ほとんどのことを実行します。 ETag ジェネレーターにはシステム固有の情報が含まれます。 i ノード そのため、ファイルを別のドライブに移動すると、 ETag 同じように。

Last-Modified /変更される場合は、-ので、限られた精度で使用される

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つの方法では、これらのヘッダは、ブラウザ内のコンテンツのキャッシュをサポートするために使用されている、と彼らは、ブラウザに指示するためにサーバーを有効にこれは必要ではない場合。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top