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
日付としてファイルを使用するのが最も簡単な解決策です。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
同様に変更される可能性があります。
それがグーグルのベストプラクティスで述べられているように:
すべてのキャッシュ可能なリソースに対して、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
Last-Modified
with ETag
(または、useragent側では、If-Modified-Since
with If-None-Match
)の使用に対する制限は記載されていません。同様に、W3仕様はあなたを制限しません。とIf-Modified-Since
一緒に使用しないと表示If-Match
されていますが、これは、日付が更新されているが、ETagで定義されているものと同じ内容のドキュメントのセットは非常に小さいためです。
If-Modified-Sinceは日付を使用し、If-None-MatchはETagを使用します。どちらも「ページ」(つまりHTML)と他のファイルに使用できます。
サーバーで弱いと述べられていない限り、ETagは強力なバリデーターと見なされるため、条件付きの範囲付きリクエストを満足させるために使用できます。ただし、ほとんどの場合、自動生成されたETagは、inode情報や一意の永続的なカウンターを使用することが多いため、サーバーファームの状況で問題が発生します。実際には、ファイルの書き込み時間が妥当なバリデーターになるため、保護された静的コンテンツを提供するなど、かなり静的なコンテンツにはLast Modifiedヘッダーで十分であることがわかりました。
ETagは、これまでで最も柔軟です。適合クライアントは、条件付きリクエストでETagを送信する必要がありますが、可能な場合は両方を送信する必要があります(SHOULD)。