Наши исследования показали, что не все браузеры одинаково уважают директивы кеша HTTP.
По соображениям безопасности мы не хотим , некоторые страницы в нашем приложении для кэширования, когда - либо, с помощью веб - браузера. Это должно работать как минимум для следующих браузеров:
- Internet Explorer 6+
- Firefox 1.5+
- Safari 3+
- Опера 9+
- Хром
Наше требование пришло из теста безопасности. После выхода из нашего веб-сайта вы можете нажать кнопку «Назад» и просмотреть кэшированные страницы.
http
caching
https
http-headers
Эдвард Уайльд
источник
источник
Ответы:
Введение
Правильный минимальный набор заголовков, который работает на всех упомянутых клиентах (и прокси):
Это
Cache-Control
соответствует спецификации HTTP 1.1 для клиентов и прокси (и неявно требуется для некоторых клиентов рядомExpires
).Pragma
согласно спецификации HTTP 1.0 для доисторических клиентов. ЭтоExpires
в соответствии со спецификациями HTTP 1.0 и 1.1 для клиентов и прокси. В HTTP 1.1Cache-Control
приоритет имеет приоритетExpires
, так что это в конце концов только для прокси HTTP 1.0.Если вас не волнует IE6 и его неправильное кэширование при обслуживании страниц только по протоколу HTTPS
no-store
, вы можете пропустить этоCache-Control: no-cache
.Если вас не интересуют ни IE6, ни клиенты HTTP 1.0 (HTTP 1.1 был представлен в 1997 году), вы можете пропустить это
Pragma
.Если вы не заботитесь о прокси HTTP 1.0, то можете пропустить
Expires
.С другой стороны, если сервер автоматически включает в себя действительный
Date
заголовок, то вы можете теоретически опуститьCache-Control
и полагаться наExpires
только на него.Но это может не сработать, если, например, конечный пользователь манипулирует датой операционной системы и клиентское программное обеспечение полагается на нее.
Другие
Cache-Control
параметры, такие как неmax-age
имеют значения, еслиCache-Control
указаны вышеупомянутые параметры.Last-Modified
Заголовок, включенные в большинстве других ответов здесь только интересно , если вы на самом деле хотите , чтобы кэшировать запрос, так что вам не нужно указывать его вообще.Как это установить?
Используя PHP:
Используя Java-сервлет или Node.js:
Использование ASP.NET-MVC
Использование ASP.NET Web API:
Использование ASP.NET:
Использование ASP.NET Core v3
Используя ASP:
Используя Ruby on Rails или Python / Flask:
Использование Python / Django:
Использование Python / Pyramid:
Используя Go:
Использование
.htaccess
файла Apache :Использование HTML4:
Метатеги HTML и заголовки ответа HTTP
Важно знать, что когда страница HTML обслуживается через соединение HTTP и заголовок присутствует как в заголовках ответа HTTP, так и в
<meta http-equiv>
тегах HTML , то заголовок, указанный в заголовке ответа HTTP, будет иметь приоритет над метатегом HTML. Метатег HTML будет использоваться только при просмотре страницы из файловой системы локального диска черезfile://
URL. Смотрите также W3 HTML spec глава 5.2.2 . Будьте осторожны с этим, когда вы не указываете их программно, потому что веб-сервер может включать некоторые значения по умолчанию.Как правило, лучше не указывать метатеги HTML, чтобы избежать путаницы среди начинающих и полагаться на жесткие заголовки HTTP-ответов. Более того, именно эти
<meta http-equiv>
теги недопустимы в HTML5. Разрешены толькоhttp-equiv
значения, указанные в спецификации HTML5 .Проверка фактических заголовков ответа HTTP
Чтобы проверить и то, и другое, вы можете увидеть / отладить их в мониторе HTTP-трафика набора инструментов разработчика веб-браузера. Для этого нажмите F12 в Chrome / Firefox23 + / IE9 +, а затем откройте панель вкладок «Сеть» или «Сеть», а затем щелкните интересующий HTTP-запрос, чтобы раскрыть все подробности о HTTP-запросе и ответе. Ниже приведен скриншот из Chrome:
Я хочу установить эти заголовки и при загрузке файлов
Прежде всего, этот вопрос и ответ нацелены на «веб-страницы» (HTML-страницы), а не на «загрузки файлов» (PDF, zip, Excel и т. Д.). Вам лучше их кэшировать и использовать какой-нибудь идентификатор версии файла где-нибудь в пути URI или строку запроса, чтобы принудительно выполнить повторную загрузку измененного файла. В любом случае, применяя эти заголовки без кэширования при загрузке файлов, остерегайтесь ошибки IE7 / 8 при обработке загрузки файлов по HTTPS вместо HTTP. Подробнее см. IE не может загрузить foo.jsf. IE не смог открыть этот интернет-сайт. Запрашиваемый сайт либо недоступен, либо не найден .
источник
(Привет всем: пожалуйста, не просто бездумно копируйте и вставляйте все заголовки, которые вы можете найти)
Прежде всего, история кнопки «Назад» не является кешем :
В старой спецификации HTTP формулировка была еще сильнее, явно указав браузерам игнорировать директивы кеша для истории кнопок возврата.
Назад должна вернуться назад во времени (к тому времени , когда пользователь был в системе). Он не переходит к ранее открытому URL.
Однако на практике кэш может влиять на кнопку «Назад» в очень специфических обстоятельствах:
Cache-Control: no-store, must-revalidate
(некоторые браузеры наблюдают,no-store
а некоторые наблюдаютmust-revalidate
)Вам никогда не нужно ни одного из:
<meta>
с заголовками кэша - это не работает вообще. Совершенно бесполезно.post-check
/pre-check
- это директива только для IE, которая применяется только к кэшируемым ресурсам.Если вы хотите, вы можете добавить:
no-cache
илиmax-age=0
, что сделает ресурс (URL) устаревшим и потребует, чтобы браузеры проверили с сервером, есть ли более новая версия (no-store
уже подразумевает, что это еще сильнее).Expires
с датой в прошлом для клиентов HTTP / 1.0 (хотя настоящие клиенты только с HTTP / 1.0 полностью отсутствуют в наши дни).Бонус: новый HTTP-кеширование RFC .
источник
Cache-Control: must-revalidate
. Почему бы не отправить,Cache-Control: no-cache
посколькуno-cache
уже подразумеваетсяmust-revalidate
? w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.1no-cache
сmust-revalidate
верна для кеша, но обратная история не является кешем. Браузер особый случай явноmust-revalidate
для управления поведением истории .Как сказал @Kornel, вам нужно не деактивировать кеш, а деактивировать буфер истории. У разных браузеров есть свои тонкие способы отключения буфера истории.
В Chrome (v28.0.1500.95 m) мы можем сделать это только путем
Cache-Control: no-store
.В FireFox (v23.0.1) любой из них будет работать:
Cache-Control: no-store
Cache-Control: no-cache
(только https)Pragma: no-cache
(только https)Vary: *
(только https)В Opera (v12.15) мы можем сделать это только
Cache-Control: must-revalidate
(только https).В Safari (v5.1.7, 7534.57.2) любой из них будет работать:
Cache-Control: no-store
<body onunload="">
в HTMLCache-Control: no-store
(только https)В IE8 (v8.0.6001.18702IC) любой из них будет работать:
Cache-Control: must-revalidate, max-age=0
Cache-Control: no-cache
Cache-Control: no-store
Cache-Control: must-revalidate
Expires: 0
Cache-Control: must-revalidate
Expires: Sat, 12 Oct 1991 05:00:00 GMT
Pragma: no-cache
(только https)Vary: *
(только https)Объединение вышесказанного дает нам это решение, которое работает для Chrome 28, FireFox 23, IE8, Safari 5.1.7 и Opera 12.15:
Cache-Control: no-store, must-revalidate
(только https)Обратите внимание, что https необходим, потому что Opera не будет отключать буфер истории для простых http-страниц. Если вы действительно не можете получить https и готовы игнорировать Opera, лучшее, что вы можете сделать, это:
Ниже показаны необработанные журналы моих тестов:
HTTP:
Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
Expires: 0
Pragma: no-cache
Vary: *
<body onunload="">
Ошибка: Opera 12.15
Успех: Chrome 28, FireFox 23, IE8, Safari 5.1.7
Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
Expires: Sat, 12 Oct 1991 05:00:00 GMT
Pragma: no-cache
Vary: *
<body onunload="">
Ошибка: Opera 12.15
Успех: Chrome 28, FireFox 23, IE8, Safari 5.1.7
Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
Expires: 0
Pragma: no-cache
Vary: *
Ошибка: Safari 5.1.7, Opera 12.15
Успех: Chrome 28, FireFox 23, IE8
Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
Expires: Sat, 12 Oct 1991 05:00:00 GMT
Pragma: no-cache
Vary: *
Ошибка: Safari 5.1.7, Opera 12.15
Успех: Chrome 28, FireFox 23, IE8
Cache-Control: private, no-cache, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
Expires: 0
Pragma: no-cache
Vary: *
<body onunload="">
Ошибка: Chrome 28, FireFox 23, Safari 5.1.7, Opera 12.15
Успех: IE8
Cache-Control: private, no-cache, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
Expires: Sat, 12 Oct 1991 05:00:00 GMT
Pragma: no-cache
Vary: *
<body onunload="">
Ошибка: Chrome 28, FireFox 23, Safari 5.1.7, Opera 12.15
Успех: IE8
Cache-Control: private, no-cache, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
Expires: 0
Pragma: no-cache
Vary: *
<body onunload="">
Ошибка: Chrome 28, FireFox 23, Safari 5.1.7, Opera 12.15
Успех: IE8
Cache-Control: private, no-cache, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
Expires: Sat, 12 Oct 1991 05:00:00 GMT
Pragma: no-cache
Vary: *
<body onunload="">
Ошибка: Chrome 28, FireFox 23, Safari 5.1.7, Opera 12.15
Успех: IE8
Cache-Control: no-store
Ошибка: Safari 5.1.7, Opera 12.15
Успех: Chrome 28, FireFox 23, IE8
Cache-Control: no-store
<body onunload="">
Ошибка: Opera 12.15
Успех: Chrome 28, FireFox 23, IE8, Safari 5.1.7
Cache-Control: no-cache
Ошибка: Chrome 28, FireFox 23, Safari 5.1.7, Opera 12.15
Успех: IE8
Vary: *
Ошибка: Chrome 28, FireFox 23, IE8, Safari 5.1.7, Opera 12.15
Успех: нет
Pragma: no-cache
Ошибка: Chrome 28, FireFox 23, IE8, Safari 5.1.7, Opera 12.15
Успех: нет
Cache-Control: private, no-cache, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
Expires: Sat, 12 Oct 1991 05:00:00 GMT
Pragma: no-cache
Vary: *
<body onunload="">
Ошибка: Chrome 28, FireFox 23, Safari 5.1.7, Opera 12.15
Успех: IE8
Cache-Control: private, no-cache, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
Expires: 0
Pragma: no-cache
Vary: *
<body onunload="">
Ошибка: Chrome 28, FireFox 23, Safari 5.1.7, Opera 12.15
Успех: IE8
Cache-Control: must-revalidate, max-age=0
Ошибка: Chrome 28, FireFox 23, Safari 5.1.7, Opera 12.15
Успех: IE8
Cache-Control: must-revalidate
Expires: 0
Ошибка: Chrome 28, FireFox 23, Safari 5.1.7, Opera 12.15
Успех: IE8
Cache-Control: must-revalidate
Expires: Sat, 12 Oct 1991 05:00:00 GMT
Ошибка: Chrome 28, FireFox 23, Safari 5.1.7, Opera 12.15
Успех: IE8
Cache-Control: private, must-revalidate, proxy-revalidate, s-maxage=0
Pragma: no-cache
Vary: *
<body onunload="">
Ошибка: Chrome 28, FireFox 23, IE8, Safari 5.1.7, Opera 12.15
Успех: нет
HTTPS:
Cache-Control: private, max-age=0, proxy-revalidate, s-maxage=0
Expires: 0
<body onunload="">
Ошибка: Chrome 28, FireFox 23, IE8, Safari 5.1.7, Opera 12.15
Успех: нет
Cache-Control: private, max-age=0, proxy-revalidate, s-maxage=0
Expires: Sat, 12 Oct 1991 05:00:00 GMT
<body onunload="">
Ошибка: Chrome 28, FireFox 23, IE8, Safari 5.1.7, Opera 12.15
Успех: нет
Vary: *
Ошибка: Chrome 28, Safari 5.1.7, Opera 12.15
Успех: FireFox 23, IE8
Pragma: no-cache
Ошибка: Chrome 28, Safari 5.1.7, Opera 12.15
Успех: FireFox 23, IE8
Cache-Control: no-cache
Ошибка: Chrome 28, Safari 5.1.7, Opera 12.15
Успех: FireFox 23, IE8
Cache-Control: private, no-cache, max-age=0, proxy-revalidate, s-maxage=0
Ошибка: Chrome 28, Safari 5.1.7, Opera 12.15
Успех: FireFox 23, IE8
Cache-Control: private, no-cache, max-age=0, proxy-revalidate, s-maxage=0
Expires: 0
Pragma: no-cache
Vary: *
Ошибка: Chrome 28, Safari 5.1.7, Opera 12.15
Успех: FireFox 23, IE8
Cache-Control: private, no-cache, max-age=0, proxy-revalidate, s-maxage=0
Expires: Sat, 12 Oct 1991 05:00:00 GMT
Pragma: no-cache
Vary: *
Ошибка: Chrome 28, Safari 5.1.7, Opera 12.15
Успех: FireFox 23, IE8
Cache-Control: must-revalidate
Ошибка: Chrome 28, FireFox 23, IE8, Safari 5.1.7
Успех: Opera 12.15
Cache-Control: private, must-revalidate, proxy-revalidate, s-maxage=0
<body onunload="">
Ошибка: Chrome 28, FireFox 23, IE8, Safari 5.1.7
Успех: Opera 12.15
Cache-Control: must-revalidate, max-age=0
Ошибка: Chrome 28, FireFox 23, Safari 5.1.7
Успех: IE8, Opera 12.15
Cache-Control: private, no-cache, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
Expires: Sat, 12 Oct 1991 05:00:00 GMT
Pragma: no-cache
Vary: *
<body onunload="">
Ошибка: Chrome 28, Safari 5.1.7
Успех: FireFox 23, IE8, Opera 12.15
Cache-Control: private, no-cache, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
Expires: 0
Pragma: no-cache
Vary: *
<body onunload="">
Ошибка: Chrome 28, Safari 5.1.7
Успех: FireFox 23, IE8, Opera 12.15
Cache-Control: no-store
Ошибка: Opera 12.15
Успех: Chrome 28, FireFox 23, IE8, Safari 5.1.7
Cache-Control: private, no-cache, no-store, max-age=0, proxy-revalidate, s-maxage=0
Expires: 0
Pragma: no-cache
Vary: *
<body onunload="">
Ошибка: Opera 12.15
Успех: Chrome 28, FireFox 23, IE8, Safari 5.1.7
Cache-Control: private, no-cache, no-store, max-age=0, proxy-revalidate, s-maxage=0
Expires: Sat, 12 Oct 1991 05:00:00 GMT
Pragma: no-cache
Vary: *
<body onunload="">
Ошибка: Opera 12.15
Успех: Chrome 28, FireFox 23, IE8, Safari 5.1.7
Cache-Control: private, no-cache
Expires: Sat, 12 Oct 1991 05:00:00 GMT
Pragma: no-cache
Vary: *
Ошибка: Chrome 28, Safari 5.1.7, Opera 12.15
Успех: FireFox 23, IE8
Cache-Control: must-revalidate
Expires: 0
Ошибка: Chrome 28, FireFox 23, Safari 5.1.7,
успех: IE8, Opera 12.15
Cache-Control: must-revalidate
Expires: Sat, 12 Oct 1991 05:00:00 GMT
Ошибка: Chrome 28, FireFox 23, Safari 5.1.7,
успех: IE8, Opera 12.15
Cache-Control: private, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
Expires: 0
<body onunload="">
Ошибка: Chrome 28, FireFox 23, Safari 5.1.7,
успех: IE8, Opera 12.15
Cache-Control: private, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
Expires: Sat, 12 Oct 1991 05:00:00 GMT
<body onunload="">
Ошибка: Chrome 28, FireFox 23, Safari 5.1.7,
успех: IE8, Opera 12.15
Cache-Control: private, must-revalidate
Expires: Sat, 12 Oct 1991 05:00:00 GMT
Pragma: no-cache
Vary: *
Ошибка: Chrome 28, Safari 5.1.7
Успех: FireFox 23, IE8, Opera 12.15
Cache-Control: no-store, must-revalidate
Ошибка: нет
Успех: Chrome 28, FireFox 23, IE8, Safari 5.1.7, Opera 12.15
источник
<body onunload="">
но это больше похоже на способ решения проблемы. Я попытался использовать .htaccess и изменить заголовки таким образом, если я использую HTTPS, должен ли он работать таким образом? В основном это сафари, где проблема возникает больше всего.Cache-Control: no-store
сделает свое дело.<body onunload="">
нужен только тогда, когда у вас нет HTTPS.Я нашел маршрут web.config полезным (пытался добавить его в ответ, но, похоже, он не был принят, поэтому размещать здесь)
А вот способ Express / node.js сделать то же самое:
источник
web.conf
это: Это основные настройки и файл конфигурации дляASP.NET
веб-приложения. Это документ XML, который находится в корневом каталоге. ( вики )Я обнаружил, что у всех ответов на этой странице все еще были проблемы. В частности, я заметил, что ни один из них не помешает IE8 использовать кэшированную версию страницы, когда вы открыли ее, нажав кнопку «Назад».
После долгих исследований и испытаний я обнаружил, что мне нужны только два заголовка:
Для объяснения заголовка Vary, проверьте http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html#sec13.6
В IE6-8, FF1.5-3.5, Chrome 2-3, Safari 4 и Opera 9-10 эти заголовки вызывали запрос страницы с сервера при нажатии на ссылку на страницу или указании URL-адреса. прямо в адресной строке. Это охватывает около 99% всех используемых браузеров по состоянию на январь 10 года.
В IE6 и Opera 9-10 нажатие кнопки «Назад» по-прежнему вызывало загрузку кэшированной версии. Во всех других браузерах, которые я тестировал, они получали свежую версию с сервера. До сих пор я не нашел ни одного набора заголовков, который бы заставлял эти браузеры не возвращать кэшированные версии страниц при нажатии кнопки «Назад».
Обновление: после написания этого ответа я понял, что наш веб-сервер идентифицирует себя как сервер HTTP 1.0. Заголовки, которые я перечислил, являются правильными для того, чтобы ответы от сервера HTTP 1.0 не кэшировались браузерами. Для сервера HTTP 1.1 посмотрите ответ BalusC .
источник
После небольшого исследования мы пришли к следующему списку заголовков, который, похоже, покрывал большинство браузеров:
В ASP.NET мы добавили их, используя следующий фрагмент:
Найдено по адресу : http://forums.asp.net/t/1013531.aspx
источник
Cache-Control: no-cache
иCache-Control: private
столкновение - вы никогда не должны собирать оба вместе: первое говорит браузерам и прокси вообще не кэшировать, второе говорит прокси не кэшировать, но позволяет браузерам хранить свою собственную личную копию. Я не уверен, за какими настройками будет следовать браузер, но вряд ли он будет согласован между браузерами и версиями.Использование заголовка прагмы в ответе - сказка жен. RFC2616 определяет его только как заголовок запроса
http://www.mnot.net/cache_docs/#PRAGMA
источник
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я настоятельно рекомендую прочитать ответ @ BalusC. Прочитав следующий учебник по кэшированию: http://www.mnot.net/cache_docs/ (я тоже рекомендую его прочитать), я считаю, что это правильно. Тем не менее, по историческим причинам (и потому что я проверял это сам), я включу свой оригинальный ответ ниже:
Я попробовал «принятый» ответ для PHP, который не работал для меня. Затем я провел небольшое исследование, нашел небольшой вариант, проверил его, и это сработало. Вот:
Это должно работать. Проблема заключалась в том, что при установке одной и той же части заголовка дважды, если
false
он не передан в качестве второго аргумента функции заголовка, функция заголовка просто перезапишет предыдущийheader()
вызов. Таким образом, при установкеCache-Control
, например, если вы не хотите помещать все аргументы в одинheader()
вызов функции, он должен сделать что-то вроде этого:Смотрите более полную документацию здесь .
источник
Для ASP.NET Core создайте простой класс промежуточного программного обеспечения:
затем зарегистрируйте его
Startup.cs
Убедитесь, что вы добавили это где-то после
источник
Эти директивы не снижают риск для безопасности. Они действительно предназначены для того, чтобы заставить UA обновлять изменчивую информацию, а не удерживать UA от сохранения информации. Смотрите этот похожий вопрос . По крайней мере, нет никакой гарантии, что любые маршрутизаторы, прокси и т. Д. Также не будут игнорировать директивы кэширования.
С другой стороны, политика в отношении физического доступа к компьютерам, установки программного обеспечения и т. П. Позволит вам значительно опередить большинство компаний в плане безопасности. Если потребители этой информации являются представителями общественности, единственное, что вы действительно можете сделать, это помочь им понять, что как только информация попадает на их машину, эта машина становится их ответственностью, а не ваша.
источник
В IE6 есть ошибка
Содержимое с «Content-Encoding: gzip» всегда кэшируется, даже если вы используете «Cache-Control: no-cache».
http://support.microsoft.com/kb/321722
Вы можете отключить сжатие gzip для пользователей IE6 (проверьте пользовательский агент на наличие «MSIE 6»)
источник
RFC для HTTP 1.1 говорится, что правильный метод - добавить заголовок HTTP для:
Cache-Control: без кеша
Старые браузеры могут игнорировать это, если они не соответствуют должным образом HTTP 1.1. Для тех, кто может попробовать заголовок:
Прагма: без кеша
Это также должно работать для браузеров HTTP 1.1.
источник
Установка модифицированного заголовка http на некоторую дату в 1995 году обычно делает свое дело.
Вот пример:
источник
В документации по PHP для функции header есть довольно полный пример (предоставленный третьей стороной):
источник
Если у вас возникают проблемы с загрузкой IE6-IE8 через SSL и кеш: заголовок без кеша (и аналогичные значения) с файлами MS Office, вы можете использовать кеш: частный, заголовок без хранилища и файл возврата по запросу POST. Оно работает.
источник
в моем случае я решаю проблему в Chrome с этим
где мне нужно очистить содержимое данных прежней формы, когда пользователи нажимают кнопку назад из соображений безопасности
источник
Принятый ответ не работает для IIS7 +, учитывая большое количество вопросов о том, что заголовки кэша не отправляются во II7:
И так далее
Принятый ответ правильный, в котором должны быть установлены заголовки, но не в том, как они должны быть установлены. Этот способ работает с IIS7:
Первая строка устанавливает
Cache-control
дляno-cache
, а вторая строка добавляют другие атрибутыno-store, must-revalidate
источник
Response.Cache.SetAllowResponseInBrowserHistory(false); Response.Cache.SetCacheability(HttpCacheability.NoCache); Response.Cache.SetNoStore(); Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
Я получил лучшие и наиболее согласованные результаты во всех браузерах, установив Pragma: no-cache
источник
Заголовки в ответе, предоставленном BalusC, не мешают Safari 5 (и, возможно, также более старым версиям) отображать содержимое из кэша браузера при использовании кнопки «Назад» браузера. Чтобы предотвратить это, добавьте пустой атрибут обработчика события onunload в тег body:
Этот взлом, по-видимому, нарушает кэш обратного просмотра в Safari: при нажатии кнопки «Назад» происходит ли событие кросс-браузерной загрузки?
источник
Кроме того, просто для правильной меры, убедитесь, что вы сбросили
ExpiresDefault
в своем.htaccess
файле, если вы используете это для включения кэширования.После этого вы можете
ExpiresByType
установить конкретные значения для файлов, которые вы хотите кэшировать:Это также может пригодиться, если ваши динамические файлы, например php и т. Д., Кэшируются браузером, и вы не можете понять, почему. Проверьте
ExpiresDefault
.источник
В дополнение к заголовкам рассмотрите возможность обслуживания вашей страницы через https . Многие браузеры не будут кэшировать https по умолчанию.
источник
источник
Для завершения BalusC -> ОТВЕТ Если вы используете perl, вы можете использовать CGI для добавления заголовков HTTP.
Использование Perl:
Использование apache httpd.conf
Примечание. Когда я пытался использовать html META, браузеры игнорировали их и кэшировали страницу.
источник
Я просто хочу отметить, что если кто-то хочет запретить кэширование ТОЛЬКО динамического контента, добавление этих дополнительных заголовков должно производиться программно.
Я отредактировал файл конфигурации моего проекта, добавив заголовки без кэширования, но это также отключило кэширование статического содержимого, что обычно нежелательно. Изменение заголовков ответов в коде гарантирует, что изображения и файлы стилей будут кэшироваться.
Это совершенно очевидно, но все же стоит упомянуть.
И еще одно предупреждение. Будьте осторожны, используя метод ClearHeaders из класса HttpResponse. Это может привести к ушибам, если вы будете использовать это безрассудно. Как будто это дало мне.
После перенаправления на событие ActionFilterAttribute последствия очистки всех заголовков теряют все данные сеанса и данные в хранилище TempData. Во время перенаправления безопаснее перенаправлять из действия или не очищать заголовки.
На второй мысли я отговариваю всех использовать метод ClearHeaders. Заголовки лучше убирать отдельно. И чтобы правильно установить заголовок Cache-Control, я использую этот код:
источник
Мне не повезло с
<head><meta>
элементами. Добавление параметров, связанных с HTTP-кешем напрямую (вне HTML-документа), действительно работает для меня.Пример кода на Python с использованием
web.header
вызовов web.py приведен ниже. Я намеренно отредактировал свой личный ненужный служебный код.источник
Посмотрите эту ссылку на пример кеширования:
http://securityevaluators.com/knowledge/case_studies/caching/
Резюме, согласно статье,
Cache-Control: no-store
работает только на Chrome, Firefox и IE. IE принимает другие элементы управления, а Chrome и Firefox - нет. Ссылка представляет собой хорошее чтение с историей кеширования и документальным подтверждением концепции.источник
Не уверен, что мой ответ звучит просто и глупо, и, возможно, он уже был известен вам давным-давно, но, поскольку одна из ваших целей - запретить кому-либо использовать кнопку браузера назад для просмотра ваших исторических страниц , вы можете использовать:
window.location.replace("https://www.example.com/page-not-to-be-viewed-in-browser-history-back-button.html");
Конечно, это может быть невозможно реализовать на всем сайте, но по крайней мере для некоторых критических страниц вы можете сделать это. Надеюсь это поможет.
источник
Вы можете использовать блок местоположения для установки отдельного файла вместо целого приложения, чтобы получить кеширование в IIS
источник