If-modified-sinceとif-none-matchの違いは何ですか? if-none-matchはファイルに使用され、if-modified-sinceはページに使用されていると感じていますか?
Last-Modified/If-Modified-Since
とETag/If-None-Match
の違いについて:
両方を同じ意味で使用できます。ただし、リソースのタイプとサーバー上での生成方法に応じて、1つまたは他の質問(「これは...以降に変更されていますか?」/「これはまだこのETagと一致しますか?」) 。
例:
mtime
をLast-Modified
日付として使用するのが最も簡単なソリューションです。ETag
としてのページコンテンツのmd5ハッシュは、はるかに簡単になります。トピックの詳細については、次のリンクを参照してください。
If-Modified-Since
は Last-Modified
に対して If-None-Match
は ETag
と比較されます。両方 Modified-Since
およびETag
は、リソースの特定のバリアントを識別するために使用できます。
しかし、If-Modified-Since
からLast-Modified
は、キャッシュされたバリアントがolderかnewerかを示します一方、If-None-Match
to ETag
は、両方がidenticalであるかどうかの情報を提供します。さらに、ほとんどのETag
ジェネレーターにはシステム固有の情報 inode が含まれているため、ファイルを別のドライブに移動するとETag
も変更される可能性があります。
Last-Modified/If-Modified-Sinceで使用されるタイムスタンプ値の精度は限られています-1秒であり、たとえば1秒に複数のメッセージが投稿される可能性のあるWebチャットアプリケーションのような高速に変化するコンテンツには不十分です。 ETag/If-None-Matchは、この問題の解決に役立ちます。
グーグルのベストプラクティスで述べられているように:
すべてのキャッシュ可能なリソースに対して、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
If-Modified-Since は日付を使用しますが、 If-None-Match は ETag を使用します。これらは両方とも「ページ」(つまりHTML)と他のファイルに使用できます。
サーバーによって弱いと記載されていない限り、ETagは強力なバリデーターと見なされるため、条件付きの範囲の要求を満足させるために使用できます。ただし、ほとんどの自動生成されたETagは、サーバーファームの状況で困難を示します。これは、多くの場合、iノード情報や一意の永続カウンターを使用するためです。実際には、かなり変更されたコンテンツには、Last Modifiedヘッダーで十分であることがわかりました。保護された静的コンテンツを提供します。これは、ファイルの書き込み時間が妥当なバリデーターになるためです。
ETagは、これまでで最も柔軟です。適合クライアントは、条件付きリクエストでETagを送信する必要がありますが、可能であれば両方を送信する必要があります。
If-Modified-Sinceヘッダーは、ブラウザーが要求されたリソースを最後に受信した時刻を指定するために使用されます。 If-None-Matchヘッダーは、要求されたリソースが最後に受信されたときにサーバーが発行したエンティティタグを指定するために使用されます。
説明されている2つの方法で、これらのヘッダーはブラウザー内のコンテンツのキャッシュをサポートするために使用され、サーバーはブラウザーがリソースの完全なコンテンツで応答するのではなく、リソースのキャッシュされたコピーを使用するようにブラウザーに指示できるようにします必要はありません。