Cache-Control:no-store
とCache-Control:no-cache
の実用的な違いがわかりません。
私の知る限り、no-store
は、その応答をキャッシュすることを許可されているキャッシュデバイスがないことを意味します。一方、no-cache
は、最初にソースで検証しないと、キャッシュデバイスがキャッシュされた応答を提供できないことを意味します。しかし、その検証は何ですか?条件付き取得?
レスポンスにno-cache
があるが、Last-Modified
またはETag
がない場合はどうなりますか?
よろしく。
しかし、そのチェックは何ですか?
正確にチェックLast-Modified
またはETag
。クライアントは、それらのヘッダーを使用する新しいバージョンのデータがあるかどうかをサーバーに尋ね、答えがノーの場合、キャッシュされたデータを提供します。
更新
no-cache
If the no-cache directive does not specify a field-name, then a cache MUST NOT use
the response to satisfy a subsequent request without successful revalidation with the
Origin server. This allows an Origin server to prevent caching even by caches that
have been configured to return stale responses to client requests.
理解を深めるには、以下のフローチャートを参照してください
ご指摘のとおり、キャッシュなしとは、キャッシュがないことを意味するのではなく、ユーザーエージェントは常に、キャッシュしたものを使用してもよいかどうかをサーバーに問い合わせる必要があります。対照的に、ノーストアはコピーさえ保持しないと言っています。つまり、何も質問する必要はありません。 「これを再利用できますか?」に対する答えを知っているなら常にノーです。キャッシュの検証をスキップして、他のデータのためにキャッシュにスペースを確保することで、パフォーマンスが向上します。
パフォーマンスの他に、ブラウザ履歴とは動作に違いがあります。 HTTP 1.1セクション 13.1 は、「有効期限は履歴メカニズムには適用されない」と述べています。 no-cacheヘッダーは有効期限を記述するため、[戻る]ボタンなどの履歴メカニズムには適用されません。したがって、ユーザーはサーバーに接続せずに、キャッシュなしで前のページに戻ることができます。
一方、非ストアヘッダーは、データがセッションの外部に保存されるのを防ぎます。その場合、履歴メカニズムで使用することはできません。ストアなしの場合、ユーザーが別のドメインに移動してセッションを終了してから戻ると、ブラウザーが何を表示するかを知る唯一の方法は、サーバーから最初のページを再度取得することです。
このトピックに関する Chromiumの問題 がどのように区別されるかを次に示します。
no-cacheは、「これをキャッシュしない」ことを意味しません(これはストアではありません)。 no-cacheは、リソースの鮮度を再検証しない限り、これを通常のロードに使用しないことを意味します。履歴ナビゲーションは通常の負荷ではありません。