web-dev-qa-db-ja.com

304(キャッシュから)200で変更されていません

「ステータス304未変更」と「200(キャッシュから)」の違いを正確に理解しようとしています Here is the screenshot

最後に変更したjavascriptファイルで304を取得しています。なぜこれが起こるのですか?援助をありがとう。

25
Boltosaurus

https://sookocheff.com/post/api/effective-caching/ は、これら2つのHTTPステータスコードに関する必要な理解を形成するための優れたソースです。

これをよく読んだ後、私はこの理解をしました

一般的な使用方法では、URLが取得されると、Webサーバーはリソースの現在の表現と対応するETag値を返します。これは、HTTP応答ヘッダーの「ETag」フィールドに配置されます。次に、クライアントは、そのETagとともに表現をキャッシュすることを決定します。その後、クライアントが同じURLリソースを再度取得する場合は、最初にローカルのキャッシュバージョンのURLが(Cache-ControlおよびExpireヘッダーを介して)期限切れかどうかを判断します。 URLの有効期限が切れていない場合は、ローカルにキャッシュされたリソースを取得します。 URLの有効期限が切れている(古くなっている)と判断した場合、クライアントはサーバーに接続し、以前に保存したETagのコピーを要求と共に[If-None-Match]フィールドに送信します。 (ソース: https://en.wikipedia.org/wiki/HTTP_ETag

ただし、アセットの有効期限が将来設定された場合でも、ブラウザーは「Vary」ヘッダーに従ってETagを使用して条件付きGETのためにサーバーにアクセスできます。 'vary'ヘッダーの詳細: https://www.fastly.com/blog/best-practices-using-vary-header/

4
gargkshitiz

「200(キャッシュから)」は、ブラウザが、リクエストに対してキャッシュされた応答を見つけたことを意味します。したがって、リモートサーバーからそのリソースをフェッチするためにネットワーク呼び出しを行う代わりに、キャッシュされた応答を利用しました。

現在、これらのキャッシュされた応答には、ライフタイムが関連付けられています。時間の経過とともに、応答は古くなる可能性があります。また、これらが古い状態で提供されることが許可されていない場合( セクション4.2.4-RFC7234 を参照)、ブラウザーはリモートサーバーに接続し、これらのキャッシュされた応答がまだ有効かどうかを確認する必要があります。 304応答ステータスコードは、応答が変更されておらず有効であることをブラウザに通知するサーバーの方法です。

ブラウザが304応答。関連する古い応答を「更新」できます。また、リソースへの後続のリクエストは、リモートサーバーに確認することなく(応答が再び古くなるまで)、ブラウザキャッシュから再び処理できます。

0
Pubudu