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-SinceLast-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-Modifiedwith ETag(または、useragent側では、If-Modified-Sincewith 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)。