Мне сказали, чтобы предотвратить утечку информации о пользователе, одного ответа «no-cache» недостаточно. "без магазина" тоже необходимо.
Cache-Control: no-cache, no-store
Прочитав эту спецификацию http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html , я все еще не совсем понимаю, почему.
На данный момент я понимаю, что это только для промежуточного кеш-сервера. Даже если в ответ выдается сообщение «no-cache», промежуточный кэш-сервер все равно может сохранять контент в энергонезависимой памяти. Промежуточный кэш-сервер решит, использовать ли сохраненный контент для следующего запроса. Однако, если в ответе указано «no-store», промежуточный кэш-сервер не должен хранить контент. Так безопаснее.
Есть ли еще какая-то причина, по которой нам нужны и «без кеширования», и «без хранения»?
no-cache
не означает то, что вы думаете. На самом деле это означает «пожалуйста, подтвердите».Ответы:
Сразу уточню, что
no-cache
не значит не кешировать . Фактически, это означает «повторную валидацию с сервером» перед использованием любого кешированного ответа на каждый запрос.must-revalidate
с другой стороны, повторная проверка требуется только в том случае, если ресурс считается устаревшим.Если сервер сообщает, что ресурс все еще действителен, кеш может ответить своим представлением, тем самым уменьшая необходимость повторной отправки всего ресурса сервером.
no-store
фактически является полной директивой не кэшировать и предназначена для предотвращения хранения представления в любой форме кеша вообще.Я говорю как угодно, но обратите внимание на это в спецификации HTTP RFC 2616:
Но это опущено в новой спецификации HTTP RFC 7234 в попытке сделать это
no-store
сильнее, см.http://tools.ietf.org/html/rfc7234#section-5.2.1.5
источник
Cache-Control: no-store
достаточно?no-store
и описывает,no-cache
как будто она вообще не кэширует… Я запутался!При определенных обстоятельствах IE6 по-прежнему будет кэшировать файлы, даже если они
Cache-Control: no-cache
указаны в заголовках ответов.W3C заявляет о
no-cache
:В моем приложении, если вы посетили страницу с
no-cache
заголовком, затем вышли из системы, а затем вернулись в свой браузер, IE6 все равно захватит страницу из кеша (без нового / проверяющего запроса к серверу). Добавление вno-store
заголовок остановило его. Но если вы поверите W3C на слове, на самом деле нет никакого способа контролировать это поведение:Общие различия между историей браузера и обычным HTTP-кешированием описаны в отдельном подразделе спецификации .
источник
no-store
тоже необходимо установить . В противном случае Chrome будет отображать кэшированные / буферизованные данные при использовании кнопки возврата.no-cache
заголовком. Приведенная ниже цитата W3C ясно показывает, что это не так; скорее,no-cache
заголовок просто означает, что ответ должен быть повторно проверен перед повторным использованием для обслуживания последующих запросов.Из спецификации HTTP 1.1 :
источник
no-cache
иmax-age=0
говорят, что элемент считается устаревшим. Это означает, что он должен быть повторно проверен перед обслуживанием. Это означает, что кеш может сохранить файл, а затем выполнить условный запрос, на который сервер может ответить304 NOT MODIFIED
. Очевидно, что это огромное преимущество, так как не нужно создавать и отправлять текст ответа. Итак, чтобы воспользоваться преимуществами этого большого количества (большинства?) Кешей, мы будем хранитьno-cache
ответы.Если вы хотите предотвратить любое кеширование (например, принудительно перезагрузить при использовании кнопки «Назад»), вам необходимо:
без кеша для IE
нет магазина для Firefox
Вот моя информация об этом:
http://blog.httpwatch.com/2008/10/15/two-important-differences-between-firefox-and-ie-caching/
источник
no-store
не должны быть необходимы в обычных ситуациях и могут повредить как скорости, так и удобству использования. Он предназначен для использования там, где HTTP-ответ содержит настолько конфиденциальную информацию, что ее никогда не следует записывать в кеш диска, независимо от негативных эффектов, создаваемых для пользователя.Как это устроено:
Обычно, даже если пользовательский агент, такой как браузер, определяет, что ответ не должен кэшироваться, он все равно может сохранить его в дисковом кэше по причинам, внутренним для пользовательского агента. Эта версия может использоваться для таких функций, как «исходный код», «назад», «информация о странице» и т. Д., Когда пользователь не обязательно запрашивал страницу повторно, но браузер не считает это просмотром новой страницы. и было бы разумно использовать ту же версию, которую сейчас просматривает пользователь.
Использование
no-store
предотвратит сохранение этого ответа, но это может повлиять на способность браузера предоставлять «источник просмотра», «назад», «информацию о странице» и т. Д. Без создания нового, отдельного запроса для сервера, что нежелательно. Другими словами, пользователь может попробовать просмотреть исходный код, и если браузер не сохранил его в памяти, ему либо сообщат, что это невозможно, либо это вызовет новый запрос к серверу. Следовательно, егоno-store
следует использовать только тогда, когда затрудненное взаимодействие с пользователем из-за того, что эти функции не работают должным образом или быстро, перевешиваются важностью обеспечения того, чтобы контент не сохранялся в кеше.Это неверно. Промежуточные серверы кэширования , совместимые с HTTP 1.1 будет подчиняться
no-cache
иmust-revalidate
инструкции, гарантируя , что содержимое не кэшируется. Использование этих инструкций гарантирует, что ответ не кэшируется каким-либо промежуточным кешем, и что все последующие запросы будут отправлены обратно на исходный сервер.Если промежуточный кэш-сервер не поддерживает HTTP 1.1, вам нужно будет использовать
Pragma: no-cache
и надеяться на лучшее. Обратите внимание, что если он не поддерживает HTTP 1.1,no-store
это все равно не имеет значения.источник
no-cache
поддерживается жесткая свежесть, не жертвуя всеми преимуществами кеширования, что означает, что кеш сохраняется и используется снова, если сервер отвечает 304 Not Modified.Если система кеширования правильно реализует no-store, тогда вам не понадобится no-cache. Но не все. Кроме того, некоторые браузеры реализуют без кеширования, как будто это не было хранилища. Таким образом, хотя это и не обязательно, но, вероятно, безопаснее всего включить оба.
источник
Обратите внимание, что Internet Explorer версий с 5 по 8 выдает ошибку при попытке загрузить файл, обслуживаемый через https, и сервер, отправляющий
Cache-Control: no-cache
илиPragma: no-cache
заголовки.См. Http://support.microsoft.com/kb/812935/en-us
Использование
Cache-Control: no-store
иPragma: private
кажется наиболее близким, что все еще работает.источник
Cache-Control: no-store, no-cache, must-revalidate
этот порядок, чтобы он работал. Однако это не сработало в нашем сценарии, но то, что @bassim предложил выше, сработало. Спасибо!Для Chrome используется no-cache для перезагрузки страницы при повторном посещении, но он по-прежнему кеширует ее, если вы вернетесь в историю (кнопка назад). Чтобы перезагрузить страницу и для возврата к истории, используйте no-store. IE требует повторной валидации для работы во всех случаях.
Я всегда использую, чтобы избежать ошибок и неверных интерпретаций.
если я хочу убедиться, что он перезагружается.
источник
Первоначально мы использовали no-cache много лет назад и действительно столкнулись с некоторыми проблемами с устаревшим контентом в некоторых браузерах ... К сожалению, не помню подробностей.
С тех пор мы остановились на использовании ТОЛЬКО без магазина. С тех пор ни разу не оглядывался назад и не имел ни одной проблемы с устаревшим контентом со стороны любого браузера или посредников
В этом пространстве определенно преобладает реальность реализаций по сравнению с тем, что было написано в различных RFC. Многие прокси, в частности, склонны думать, что они лучше справляются с задачей «повышения производительности», заменяя политику, которой они должны следовать, своей собственной.
источник
no-store
.Что еще хуже, в некоторых ситуациях no-cache использовать нельзя, но no-store может:
http://faindu.wordpress.com/2008/04/18/ie7-ssl-xml-flex-error-2032-stream-error/
источник
OWASP обсуждает это:
Источник здесь .
источник
no-cache
говорит, что вы не можете использовать его без проверки на сервере. Если ваша кешированная копия все еще в порядке, сервер ответит 304, и вы затем используете кешированную копию. Сохраняет потенциально большую загрузку из сети.no-store
с другой стороны, говорит, что вам вообще не разрешено кэшировать данные.