Из RFC 2616
http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.1
нет кэша
Если директива no-cache не задает имя поля, то кеш НЕ ДОЛЖЕН использовать ответ для удовлетворения последующего запроса без успешной повторной проверки с сервером происхождения. Это позволяет исходному серверу предотвращать кэширование даже с помощью кэшей, которые были настроены для возврата устаревших ответов на клиентские запросы.
Таким образом, он направляет агентов для повторной проверки всех ответов.
По сравнению с этим
обязательно перепроверить
Когда директива must-revalidate присутствует в ответе, полученном кешем, этот кеш НЕ ДОЛЖЕН использовать эту запись после того, как она устареет, чтобы ответить на последующий запрос, не проверив ее сначала на исходном сервере.
Таким образом, он направляет агентов на повторную проверку устаревших ответов.
Особенно это касается того no-cache
, как пользовательские агенты действительно эмпирически относятся к этой директиве?
Какой смысл, no-cache
если есть must-revalidate
и max-age
?
Смотрите этот комментарий:
http://palpapers.plynt.com/issues/2008Jul/cache-control-attributes/
нет кэша
Хотя эта директива звучит так, будто она инструктирует браузер не кэшировать страницу, есть небольшая разница. Согласно RFC, директива «no-cache» сообщает браузеру, что он должен выполнить повторную проверку на сервере перед тем, как обслуживать страницу из кэша. Повторная проверка - это аккуратный метод, который позволяет приложению сохранять ширину полосы. Если страница, кэшированная браузером, не изменилась, сервер просто сообщает об этом браузеру, и страница отображается из кэша. Следовательно, браузер (по крайней мере, теоретически) сохраняет страницу в своем кэше, но отображает ее только после повторной проверки на сервере. На практике IE и Firefox начали обрабатывать директиву no-cache, как будто она указывает браузеру даже не кэшировать страницу. Мы начали наблюдать это поведение около года назад.
У кого-нибудь есть что-нибудь более официальное по этому поводу?
Обновить
Директива must-revalidate должна использоваться серверами тогда и только тогда, когда неудачная проверка запроса на представление может привести к некорректной работе, такой как молчаливая неисполненная финансовая транзакция.
Это то, что я никогда не принимал близко к сердцу до сих пор. RFC говорит, что не следует использовать легкую переаттестацию. Дело в том, что с веб-сервисами вы должны принять негативное мнение и предположить худшее для ваших неизвестных клиентских приложений. Любой устаревший ресурс может вызвать проблему.
И что-то еще, что я только что рассмотрел, без Last-Modified или ETag, браузер может только получить весь ресурс снова. Однако, с ETag, я заметил, что Chrome, по крайней мере, кажется, повторяется при каждом запросе. Что делает обе эти директивы спорными или, по крайней мере, плохо названными, так как они не могут должным образом выполнить повторную проверку, если запрос также не включает другие заголовки, которые затем вызывают «всегда повторную проверку» в любом случае.
Я просто хочу прояснить этот последний момент. Просто устанавливая, must-revalidate
но не включая ETag или Last-Modified, агент может только получить контент снова, так как ему нечего отправить на сервер для сравнения.
Однако мое эмпирическое тестирование показало, что когда ETag или измененные данные заголовка включены в ответы, агенты всегда проходят повторную проверку в любом случае, независимо от наличия must-revalidate
заголовка.
Таким образом, смысл must-revalidate
состоит в том, чтобы принудительно использовать «обходной кэш», когда он устареет, что может произойти, только если вы установили время жизни / возраст, поэтому, если must-revalidate
задан ответ без возраста или других заголовков, он фактически становится эквивалентным, no-cache
поскольку ответ будет считаться сразу устаревшим.
- Итак, я собираюсь, наконец, отметить ответ Гили!
источник
Ответы:
Я считаю, что это
must-revalidate
означает:Принимая во внимание, что
no-cache
подразумевает:Если ответ кэшируется в течение 10 секунд, то срабатывает
must-revalidate
через 10 секунд, аno-cache
подразумеваетсяmust-revalidate
через 0 секунд.По крайней мере, это моя интерпретация.
источник
max-age=0, must-revalidate
иno-cache
идентичныmust-revalidate
иno-cache
имеют разное значение для свежих ответов: если кэшированный ответ является новым (т. Е. Срок действия ответа не истек),must-revalidate
прокси-сервер сразу же отправит его без повторной проверки на сервере, тогдаno-cache
как прокси-сервер должен повторно подтвердить кэшированный ответ независимо от свежести. Источник: «HTTP - Полное руководство», стр. 182-183.no-cache
иmax-age=0, must-revalidate
идентичныmax-age=0, must-revalidate
иno-cache
не совсем идентичны. Сmust-revalidate
, если сервер не отвечает на запрос перепроверки, браузер / прокси должен возвращать ошибку 504. При этомno-cache
он будет просто показывать кэшированный контент, который, вероятно, будет предпочтительным для пользователя (лучше иметь что-то устаревшее, чем вообще ничего). Именно поэтомуmust-revalidate
предназначен только для критических транзакций.источник
no-cache
интерпретации. Из RFC 7234 директива ответа «без кэширования» указывает, что ответ НЕ ДОЛЖЕН использоваться для удовлетворения последующего запроса без успешной проверки на исходном сервере. Это позволяет исходному серверу предотвратить использование его кэшем для удовлетворения запроса, не связываясь с ним, даже с помощью кэшей, которые были настроены для отправки устаревших ответов. Это звучит похоже на ограничения дляmust-revalidate
must-validate
значитmust-refresh
С интерпретацией Джеффри Фокса о том
no-cache
, что я тестировал в chrome 52.0.2743.116 m, результат показывает, что онno-cache
работает так же, какmust-revalidate
и все они НЕ будут использовать локальный кеш, когда сервер недоступен, и все они будут использовать кеш, когда нажмите «Назад» браузера. Кнопка / Вперед, когда сервер недоступен. Как и выше, я думаю, чтоmax-age=0, must-revalidate
идентичноno-cache
, по крайней мере, в реализации.источник
Я думаю, что есть разница между
max-age=0, must-revalidate
иno-cache
:В
must-revalidate
случае, если клиенту разрешено отправлятьIf-Modified-Since
запрос и обслуживать ответ из кеша, если304 Not Modified
он возвращается.В этом
no-cache
случае клиент не должен кэшировать ответ, поэтому не следует использоватьIf-Modified-Since
.источник
no-cache
это не значит ,no-store
- сno-cache
, ресурс еще можно кэшировать в клиенте; это просто должно быть повторно проверено перед использованием?no-cache
иno-store
.no-cache
означает, что ресурс ДОЛЖЕН быть переоценен . Revalidate включает возможность использовать условные запросы, такие какIf-None-Match
иIf-Modified-Since
.