Подтвердить что ты не робот

В чем разница между no-cache и no-store в Cache-control?

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

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

Что делать, если ответ имеет no-cache, но у него нет Last-Modified или ETag?

С уважением.

4b9b3361

Ответ 1

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

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


Update

От 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. 

Ответ 3

Как вы определили, no-cache не означает, что никогда не кэшируется, а скорее, что пользовательский агент должен всегда запрашивать сервер, если он в порядке, чтобы использовать то, что он кэшировал. Напротив, не-магазин говорит, что даже не держит копию, а это значит, что о ней ничего не о чем спросить. Если вы знаете ответ на вопрос "Могу ли я повторно использовать это?" всегда нет, вы получаете повышение производительности за счет (1) пропусков накладных расходов и (2) не отбрасывания какого-либо, возможно, многоразового сохраненного результата, чтобы освободить место для нового результата, который никогда не будет повторно использован.

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

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

Здесь, как Chromium issue по этому вопросу делает различие:

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