В чем разница между Cache-Control: max-age = 0 и no-cache?

Предположим, у вас есть файл f = новый файл («SomeFile»); f.length (); Вам не нужно закрывать файлы, потому что его jsut представляет путь. Вы должны всегда рассматривать возможность закрытия только чтения / писателей и потоки информации.

594
задан user2418306 28 April 2016 в 14:32
поделиться

6 ответов

У меня был тот же вопрос, и я нашел некоторую информацию в своих поисках (ваш вопрос появился как один из результатов). Вот что я определил ...

Заголовок Cache-Control имеет две стороны. С одной стороны, он может быть отправлен веб-сервером (он же «исходный сервер»). На другой стороне он может быть отправлен браузером (он же «агент пользователя»).


При отправке исходным сервером

я считаю, что max-age = 0 просто сообщает кешам ( и пользовательские агенты) ответ устарел с самого начала, поэтому они ДОЛЖНЫ повторно проверить ответ (например, с заголовком If-Not-Modified ) перед использованием кэшированной копии, тогда как no-cache сообщает им, что они ДОЛЖНЫ пройти повторную валидацию перед использованием кэшированной копии. Из 14.9. чтобы удовлетворить последующий запрос без успешной повторной валидации с исходный сервер. Это позволяет исходный сервер, чтобы предотвратить кеширование даже кешами, настроенными на вернуть устаревшие ответы клиенту запросы.

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

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

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

...

Обратите внимание, что в последнее время "cache-control: no-cache "тоже начал вести себя например, директива no-store.

В стороне, мне кажется, что Cache-Control: max-age = 0, must-revalidate должно в основном означать то же самое, что и Cache-Control: без кеширования . Так что, возможно, это способ заставить MUST -revalidate поведение no-cache , избегая при этом очевидной миграции no-cache делать то же самое, что и no-store (т.е. никакого кеширования)?


При отправке пользовательским агентом

я считаю, что ответ шахкалпеша относится к стороне пользовательского агента. Вы также можете посмотреть 13.2.6 Устранение неоднозначности множественных ответов .

Если пользовательский агент отправляет запрос с Cache-Control: max-age = 0 (также известный как «end- до конца ревалидации »), тогда каждый кэш по пути будет повторно проверять свою запись кэша (например, с заголовком If-Not-Modified ) на всем пути до исходного сервера. Если ответ равен 304 (не изменен), можно использовать кэшированный объект.

С другой стороны, отправка запроса с Cache-Control: no-cache (также известна как «end-to» -end reload ") не проходит повторную проверку, и сервер НЕ ДОЛЖЕН использовать кэшированную копию при ответе.

580
ответ дан 22 November 2019 в 21:55
поделиться

Я пишу ряд статей, который затрагивает эти темы подробно, это, по моему скромному мнению, ясно не обсужденное достаточно среди разработчиков.

Браузеры, частные прокси и CDNs:
https://medium.com/free-code-camp/http-caching-in-depth-part-1-a853c6af99db

Cache-Control & Vary https://medium.com / lojacquemin/an-in-depth-introduction-to-http-caching-cache-control-vary-e3229815ddf4

0
ответ дан 29 August 2019 в 07:34
поделиться

Арифметический сдвиг вправо сохранит знак при сдвиге числа со знаком :

11111111 (-1) will stay 11111111 (-1) 

Напротив, Логический сдвиг вправо не сохранит знак:

11111111 (-1) will become 01111111 (127)

Ваш код явно выполняет арифметический сдвиг, поэтому знаковый бит ( MSB ) повторяется. Действия оператора (>>) зависят от деталей реализации платформы, которую вы используете. В большинстве случаев это арифметический сдвиг.

Также обратите внимание, что 11111111 может иметь два разных значения в зависимости от представления. Это также влияет на способ их сдвига.

  • Если без знака, 11111111 представляет 255. Сдвиг вправо не сохранит знак, поскольку старший бит не является битом знака.
  • Если подписано, 11111111 представляет -1.
20
ответ дан 22 November 2019 в 21:55
поделиться

Я вряд ли специалист по кешированию, но Марк Ноттингем им. Вот его документы по кешированию . У него также есть отличные ссылки в разделе «Ссылки».

На основании того, что я прочитал в этих документах, похоже, что max-age = 0 может позволить кешу отправлять кэшированный ответ на запросы, поступившие на «в то же время», где «в то же время» означает достаточно близко друг к другу, они выглядят синхронными для кеша, но без кеширования не будет.

12
ответ дан 22 November 2019 в 21:55
поделиться

Разница в том, что нет кеширования (нет -store в Firefox) предотвращает любое кеширование. Это может быть полезно для предотвращения записи на диск страниц с защищенным содержимым и для страниц, которые всегда следует обновлять, даже если они повторно посещаются с помощью кнопки «Назад».

max-age = 0 указывает, что запись в кэше устарела и требует повторной проверки, но не предотвращает кеширование. Часто браузеры проверяют ресурсы только один раз за сеанс браузера, поэтому контент может не обновляться до тех пор, пока сайт не будет посещен в новом сеансе.

Обычно браузеры не удаляют просроченные записи кеша, если только они не освобождают место для нового контента, когда кеш браузера заполнен. Используя без магазина,

-2
ответ дан 22 November 2019 в 21:55
поделиться

В моих недавних тестах с IE8 и Firefox 3.5, кажется, что оба они RFC-совместимы. Тем не менее, они отличаются своей "дружелюбностью" к серверу-источнику. IE8 обрабатывает ответы no-cache с той же семантикой, что и max-age=0,must-revalidate. Firefox 3.5, однако, кажется, рассматривает no-cache как эквивалент no-store , что отстойно для производительности и использования полосы пропускания.

Squid Cache, по умолчанию, кажется, никогда не хранит ничего с заголовком no-cache, как Firefox.

Я бы посоветовал установить public,max-age=0 для нечувствительных ресурсов, которые вы хотите проверять на свежесть при каждом запросе, но при этом использовать преимущества кэширования, связанные с производительностью и пропускной способностью. Для каждого пользователя с таким же учетом используйте private,max-age=0.

Я бы избежал использования no-cache полностью, так как, похоже, некоторые браузеры и популярные кэшировали его до функционального эквивалента no-store.

Кроме того, не эмулируйте Akamai и Limelight. Хотя они, по сути, управляют массивными кэширующими массивами как своим основным бизнесом, и должны быть экспертами, на самом деле у них есть корыстный интерес в том, чтобы вызвать загрузку большего количества данных из своих сетей. Google может также не быть хорошим выбором для эмуляции. Они, кажется, используют max-age=0 или no-cache случайным образом в зависимости от ресурса.

28
ответ дан 22 November 2019 в 21:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: