93

if-modified-sinceとif-none-matchの違いは何でしょうか?ファイルにはif-none-matchが使用されているのに対し、ページにはif-modified-sinceが使用されているような気がしますか?

4

7 に答える 7

115

Last-Modified/If-Modified-Sinceとの違いについてETag/If-None-Match

どちらも同じように使用できます。ただし、リソースのタイプとサーバーでのリソースの生成方法によっては、どちらかの質問(「これは...以降に変更されていますか?」/「これはまだこのETagと一致しますか?」)の方が答えやすい場合があります。 。

例:

  • ファイルを提供している場合は、ファイルを日付として使用するのmtimeLast-Modified最も簡単な解決策です。
  • 多数のSQLクエリから構築された動的Webページを提供している場合、それらのクエリのいずれかによって返されるデータが変更されているかどうかを確認することは実用的でない場合があります(すべてに何らかの「最終変更」列がない場合)。この場合、たとえばページコンテンツのmd5ハッシュを使用ETagすると、はるかに簡単になります。
    OTOH、これは、条件付きGETの場合でも、サーバー上にページ全体を生成する必要があることを意味します。ETagに正確に何を入力する必要があるか(主キー、リビジョン番号など)を把握することで、ここで多くの時間を節約できます。

トピックの詳細については、次のリンクを参照してください。

于 2009-06-17T07:06:04.470 に答える
22

If-Modified-Sinceと比較されますがLast-ModifiedIf-None-Matchと比較されETagます。との両方Modified-SinceETag使用して、リソースの特定のバリアントを識別できます。

ただし、If-Modified-Sincetoを比較するとLast-Modified、キャッシュされたバリアントが古い新しいIf-None-Matchかがわかりますが、 toを比較すると、ETag両方が同一かどうかがわかります。さらに、ほとんどのETagジェネレーターにはシステム固有のiノードの情報が含まれているため、ファイルを別のドライブに移動すると、ETag同様に変更される可能性があります。

于 2009-06-15T22:52:55.260 に答える
13

Last-Modified / If-Modified-Sinceで使用されるタイムスタンプ値の精度は制限されています-1秒であり、たとえば、任意の1秒間に複数のメッセージが投稿される可能性があるWebチャットアプリケーションなど、急速に変化するコンテンツには不十分です。 。ETag / If-None-Matchは、その問題の解決に役立ちます。

于 2011-10-28T16:09:17.387 に答える
11

グーグルのベストプラクティスに記載されているように:

すべてのキャッシュ可能なリソースに対して、ExpiresまたはCache-Control max-ageのいずれか、およびLast-ModifiedまたはETagのいずれかを指定することが重要です。ExpiresとCache-Control:max-ageの両方を指定するか、Last-ModifiedとETagの両方を指定するのは冗長です。

https://developers.google.com/speed/docs/best-practices/caching

于 2012-05-20T08:15:29.807 に答える
6

If-Modified-Sinceは日付を使用しますが、If-None-MatchETagを使用します。これらは両方とも「ページ」(つまりHTML)と他のファイルに使用できます。

于 2009-06-15T22:42:30.153 に答える
3

サーバーによって弱いと述べられていない限り、ETagは強力なバリデーターと見なされるため、条件付きの範囲指定された要求を満たすために使用できます。ただし、ほとんどの自動生成されたETagは、iノード情報や一意の永続カウンターを使用することが多いため、サーバーファームの状況では問題が発生します。実際には、ファイルの書き込み時間が適度に優れたバリデーターになるため、Last Modifiedヘッダーは、保護された静的コンテンツを提供するなど、かなり静的なコンテンツには十分であることがわかりました。

ETagは群を抜いて最も柔軟性があります。準拠しているクライアントは、条件付きリクエストでETagを送信する必要がありますが、可能な場合は両方を送信する必要があります。

于 2009-10-13T13:20:12.170 に答える
0

If-Modified-Sinceヘッダーは、ブラウザーが要求されたリソースを最後に受信した時刻を指定するために使用されます。If-None-Matchヘッダーは、サーバーが最後に受信したときに要求されたリソースで発行したエンティティタグを指定するために使用されます。

説明した2つの方法で、これらのヘッダーはブラウザ内のコンテンツのキャッシュをサポートするために使用され、サーバーがリソースの完全なコンテンツで応答するのではなく、リソースのキャッシュされたコピーを使用するようにブラウザに指示できるようにします。必要はありません。

于 2018-12-18T15:54:39.650 に答える