В чем разница между no-cache и no-store в Cache-control? - PullRequest
26 голосов
/ 27 сентября 2011

Я не вижу практической разницы между Cache-Control:no-store и Cache-Control:no-cache.

Насколько я знаю, no-store означает, что никакое устройство кеширования не может кэшировать этот ответ.С другой стороны, no-cache означает, что ни одному устройству кэширования не разрешено обслуживать кэшированный ответ без предварительной проверки его с источником.Но что это за проверка?Условное получение?

Что если ответ имеет no-cache, но не имеет Last-Modified или ETag?

С уважением.

Ответы [ 3 ]

56 голосов
/ 30 июня 2015

См. Диаграмму ниже для лучшего понимания enter image description here

Ссылка: (https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/http-caching?hl=en#cache-control)

20 голосов
/ 27 сентября 2011

Но что это за проверка?

Точно проверка Last-Modified или ETag.Клиент спрашивает сервер, есть ли у него новая версия данных с использованием этих заголовков, и если ответ «нет», он будет обслуживать кэшированные данные.


Обновление

С RFC

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. 
7 голосов
/ 08 июля 2017

Как вы определили, отсутствие кэширования не означает, что кэширование никогда не происходит, а скорее то, что пользовательский агент должен всегда спрашивать сервер, можно ли использовать то, что он кэшировал. В отличие от этого, в магазине нет даже копии, а значит, не о чем спрашивать. Если вы знаете ответ на вопрос «Могу ли я использовать это повторно?» всегда нет, вы получаете повышение производительности, пропуская проверку кэша и экономя место в кэше для других данных.

Помимо производительности, существует история браузера . Раздел HTTP 1.1 13.13 говорит, что «время истечения не относится к механизмам истории». Заголовок без кэширования описывает истечение срока действия и поэтому не применяется к механизмам истории, таким как кнопка возврата. Таким образом, пользователь может перейти назад на предыдущую страницу без кэширования, не связываясь с сервером.

С другой стороны, заголовок no-store предотвращает сохранение данных вне сеанса, и в этом случае он просто недоступен для использования механизмом истории. При отсутствии хранилища, если пользователь завершает свою сессию, переходя на другой домен, а затем возвращается назад, единственный способ для браузера узнать, что отображать, - это снова получить начальную страницу с сервера.

Вот как Проблема хрома по этой теме делает различие:

no-cache не означает "не кешировать это" (это было бы без хранилища). no-cache означает, что не используйте это для нормальной загрузки, если ресурс не проверен на свежесть. История навигации не нормальная загрузка.

...