Кэширование js в браузере как убрать

Обновлено: 04.07.2024

I will make a change to my JS files but it won't really change in the browser, I have to rename the files every time so that it reloads it. Is there some sort of .htaccess command I can add or something to make it stop caching?

It is even caching my html pages hard core. I need to reopen my entire browser just to see changes. Could it possibly be a server problem?

9,887 27 27 gold badges 100 100 silver badges 177 177 bronze badges Does enabling the ETag header in your web server cause Chrome to cache but correctly retrieve a new copy of the file when it has changed?

14 Answers 14

You can click the settings icon on top right corner . | More Tools | Developer Tools | Network | Disable cache (while DevTools is open)

For windows, this is F12 or CTRL + SHIFT + I while on mac CMD + SHIFT + I opens up DevTools.

New path for Chrome Update Sept 2018:

Click settings icon on the top right corner . | Settings | Preferences | Developer Tools | Network | Disable cache (while DevTools is open)

635 1 1 gold badge 9 9 silver badges 25 25 bronze badges 18.8k 18 18 gold badges 84 84 silver badges 130 130 bronze badges Major failure by chrome to be caching things. even when the page is marked with No cache. Oh well at least this works, the users can suffer but at least I can develop Please note that the "Settings" are no longer in the bottom right! Click the three dots menu in the top right to get to settings. The location is: top right corner | ". " | settings | Preferences | Network | "Disable cache" (while DevTools is open). This is VERY BAD PRACTICE. No, you should not have a temporary hack for your use. you should have a PERMANENT solution for ALL of your users. The best way is a random query string at the end of the src. src="someJs.js?someRandomStringCreatedByInlineJsOrServerRenderedCode" which would make it so that it had a fresh version everytime. a good random string would be to grab todays date/time and throw it in there. you might have to turn it into a string since itll probably be a date object. It is really really bad that this was the chosen answer and upvoted so heavily. As of Chrome 61.0.3163.100, it seems that the option now lives under More Tools/Network Conditions. "Developer Tools" option no longer exists.

A faster way to do this is by right clicking the refresh icon beside the address bar and choosing Empty Cache and Hard reload

Just make sure Chrome's dev tools is open. (Press F12) By the way. This trick only works on Chrome for Windows, Ubuntu, and Mac OS

FYI, I tried all of this, and absolutely none of it worked. On my machine (with default settings for Mountain Lion), F12 shows the dashboard. how is it much better than the accepted answer? You can reload normally with the accepted answer. I see the option, but in my case, the script was not refreshed.

Hold Shift while clicking the reload button ( F5 ).

This forces the web browser to ignore the cached content and pull a new copy of the web page into the browser. Shift + F5 guarantees that the latest website content will be loaded. However, depending on the page size, it is usually slower than only F5 .


2,788 3 3 gold badges 13 13 silver badges 25 25 bronze badges 15.5k 4 4 gold badges 34 34 silver badges 58 58 bronze badges

add Something like script.js?a=[random Number] with the Random number generated by PHP.

Have you tried expire=0, the pragma "no-cache" and "cache-control=NO-CACHE"? (I dunno what they say about Scripts).

1,829 2 2 gold badges 19 19 silver badges 33 33 bronze badges I stumbled across this question and was skimming through answers. This is a terrible idea, because: 1) generating the random number at every request will cause browsers to re-download the file at every visit. You want a build time value, so that browsers only regenerate the value when you make changes to the site. Since PHP is runtime interpreted, you might need to do it at deploy-time instead. and 2) generating a random number means that sometimes (with the probability increasing over time), the browser will some random old cached copy. If you must do it at request time, use a timestamp! I am doing this and using the build version number, with a decent timeout (1 day) on the header cache value
  1. When you refresh your page in Chrome, do a CTRL+F5 to do a full refresh.
  2. Even if you set the expires to 0, it will still cache during the session. You'll have to close and re-open your browser again.
  3. Make sure when you save the files on the server, the timestamps are getting updated. Chrome will first issue a HEAD command instead of a full GET to see if it needs to download the full file again, and the server uses the timestamp to see.

If you want to disable caching on your server, you can do something like:

79.7k 47 47 gold badges 197 197 silver badges 305 305 bronze badges Had this but the pre-check=0, post-check=0 is the addition that made the difference for me.

1) Open up the Developer Tools dashboard by going to the Chrome Menu -> Tools -> Developer Tools

2) Click on the settings icon on the right hand side (it's a cog!)

3) Check the box "Disable cache (when DevTools is open)"

4) Now, while the dashboard is up, just hit refresh and JS won't be cached!


2,470 5 5 gold badges 24 24 silver badges 44 44 bronze badges However, it does not help to debug using WebStorm. Then DevTools are open WebStrom cannot attach a debugger.

The problem is that Chrome needs to have must-revalidate in the Cache-Control` header in order to re-check files to see if they need to be re-fetched.

You can always SHIFT-F5 and force Chrome to refresh, but if you want to fix this problem on the server, include this response header:

This tells Chrome to check with the server, and see if there is a newer file. IF there is a newer file, it will receive it in the response. If not, it will receive a 304 response, and the assurance that the one in the cache is up to date.

If you do NOT set this header, then in the absence of any other setting that invalidates the file, Chrome will never check with the server to see if there is a newer version.

Так мы предотвращаем кэширование файлов JS и CSS браузерами. Это кажется немного избитым.. есть ли лучший способ?

Update: причина, по которой мы хотим предотвратить кэширование, заключается в том, чтобы обеспечить загрузку новой версии файлов при выпуске новой версии.

вы хотите, чтобы CSS и JS были кэшированы. Это ускоряет загрузку веб-страницы, когда они вернутся. Добавление метки времени, ваш пользователь будет вынужден загружать его снова и снова.

Если вы хотите убедиться, что у них всегда есть новая версия, чем ваша система сборки добавьте номер сборки в конец файла вместо метки времени.

Если у вас есть проблемы с ним только в dev, убедитесь, что ваши браузеры не кэшируют файлы или не устанавливают заголовки на вашем dev страницы не кэшировать.

ваш веб-сервер может отправлять эти заголовки (на каждом файле JS и CSS, который он обслуживает), чтобы сказать браузерам не кэшировать их:

но это увеличит сетевая загрузка на вашем сайте, и пользователи будут видеть загрузку страницы медленнее. Вы могли бы быть немного более снисходительными и позволить браузеру кэшировать файл CSS в течение 60 секунд:

Если вы действительно хотите, чтобы браузер проверял новый файл с каждой загрузкой страницы, вы можете еще сохраните сетевой трафик с помощью ETag:

ETag - это просто уникальный идентификатор, который ваш веб-сервер составляет при каждом изменении файла. В следующий раз браузер хочет файл, он спрашивает сервер: "делает /js / pm.в этом.у js все еще есть ETag o2389r98ur0w3894tuq894?"и если это так, ваш сервер просто говорит "Да". Таким образом, ваш сервер не должен отправлять весь файл снова, и пользователю не нужно ждать его загрузки. Беспроигрышный.

как убедить ваш веб-сервер автогенерировать ETags зависит от сервера. Обычно это не трудно.

Я видел хак, который вы используете раньше. Как и многое в интернете, это не очень или особенно эффективно, но работает.

Если причина, по которой мы хотим предотвратить кэширование, заключается в том, чтобы обеспечить загрузку новой версии файлов при выпуске новой версии., вы хотите, чтобы новый js загружался, когда есть новый выпуск, а не все время.

для этого вы хотите, чтобы значение" ts " было связано с файлом, а не со временем суток. Вы можете использовать одну из этих систем:

  1. ts = метка времени файла
  2. ts = MD5 (или любая контрольная сумма) файл
  3. ts = версия кода. Если у вас есть сценарий, который выполняет развертывание, убедитесь, что он добавляет код версии (или дату выпуска) в некоторый файл include, который будет назначен ts.

таким образом, браузер будет перезагружать файл, только если он новый, а не все время.

простым подходом к этому было бы использовать последнюю измененную дату JS или css-файлов в URL-адресе вместо отметки времени. Это предотвратит кэширование только при наличии новой версии файла на сервере.

редактировать

если вы используете Spring Boot, теперь намного проще предотвратить кэширование измененных файлов.

все, что вам нужно сделать, это добавить это в приложение.свойства:

если вы используете Thymeleaf или по Freemarker это совершенно автонастраиваемые. Если вы используете JSPs, вам нужно вручную объявить ResourceUrlEncodingFilter.

и что теперь мой "старый" пост, который также работает, но требует больше работы.

поскольку вы используете Java, есть шанс, что вы также используете maven для управления своим проектом.

в этом случае, чтобы повысить производительность и убедиться, что браузер не кэширует статические ресурсы при создании новой версии программного обеспечения необходимо объединить все таблицы стилей и файлы JavaScript в один файл их типа, а также изменить URL-адреса ресурсов при создании новой версии.

к счастью maven может сделать все это для вас во время сборки. Вам понадобится minify-maven-plugin и maven-replacer-plugin .

этот отрывок из пом.xml должен помочь вам начать:

вот как включить ваши статические ресурсы в заголовок.jsp

для целей отладки, установить панель инструментов веб-разработчика для FireFox и активировать там "деактивировать кэш"

обновление:
Когда у Вас установлен FireBug, вы можете отключить кэширование, а также в настройках вкладки сеть.

если вы можете включить фильтр сервлетов Java в свое приложение, вот рабочее решение:CorrectBrowserCacheHandlerFilter.java

в основном, когда ваш браузер запрашивает статические файлы, сервер будет перенаправлять все запросы на один и тот же но с параметром хэш-запрос ( ?v=azErT например), который зависит от содержимого целевого статического файла.

похоже, если я загружаю динамический контент с помощью $.get() , результат кэшируется в браузере.

добавление некоторой случайной строки в QueryString, похоже, решает эту проблему (я использую new Date().toString() ), но это похоже на хак.

есть ли другой способ добиться этого? Или, если уникальная строка-единственный способ достичь этого, любые предложения, кроме new Date() ?

Я использую new Date().getTime() , что позволит избежать конфликтов, если у вас нет нескольких запросов, происходящих в течение одной миллисекунды:

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

следующее предотвратит кэширование всех будущих запросов AJAX, независимо от используемого метода jQuery ($.получить.$ ,Аякс и т. д.)

$JQuery.get () будет кэшировать результаты. Вместо

вы должны использовать $.ajax, который позволит Вам отключить кэширование:

другой способ-не предоставлять заголовки кэша из serverside в коде, который генерирует ответ на вызов ajax:

все ответы здесь оставляют след на запрошенном URL, который будет отображаться в журналах доступа сервера.

Мне нужно было решение на основе заголовка без побочных эффектов, и я обнаружил, что это может быть достигнуто путем настройки заголовков, упомянутых в как управлять кэшированием веб-страниц во всех браузерах?.

результаты, работающие по крайней мере для Chrome, будут

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

Я обычно использую Math.random() но я не вижу ничего плохого в использовании даты (вы не должны делать запросы AJAX достаточно быстро, чтобы получить одно и то же значение дважды).

можно использовать cache имущества:

другим подходом было бы посмотреть, как вы кэшируете вещи на стороне сервера.

конечно, методы "взлома кэша" выполнят эту работу, но это не произойдет в первую очередь, если сервер укажет клиенту, что ответ не должен быть кэширован. В некоторых случаях полезно кэшировать ответы, в некоторых случаях нет. Пусть сервер определит правильное время жизни данных. Вы можете изменить его позже. Гораздо проще сделать с сервера, чем из разных мест в вашем коде пользовательского интерфейса.

конечно это не поможет если тебя нет контроль над сервером.

Как насчет использования запроса POST вместо GET. (Который вы должны в любом случае. )

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

  • Internet Explorer 6+
  • Firefox 1.5+
  • сафари 3+
  • Opera 9+
  • Chrome

наши требование пришло из теста безопасности. После выхода с нашего сайта вы можете нажать кнопку "назад" и просмотреть кэшированные страницы.

правильный минимальный набор заголовков, который работает во всех упомянутых клиентов (и прокси):

с другой стороны, если сервер автоматически включает действительное Date заголовок, тогда вы можете теоретически опустить Cache-Control тоже и положиться на Expires только.

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

использование сервлета Java или узла.js:

использование Ruby on Rails или Python/Flask:

Использование Python / Django:

Использование Python / Pyramid:

Использование Google Go:

Chrome developer toolset HTTP traffic monitor showing HTTP response headers on stackoverflow.com

(Эй, все: пожалуйста, не просто бездумно копировать и вставлять все заголовки, которые вы можете найти)

модель свежести (раздел 4.2) не обязательно применяется к механизмам истории. То есть механизм истории может отображать предыдущее представление, даже если оно истекло.

Back должен вернуться во времени (к тому времени, когда пользователь был logged in). Он не переходит к ранее открытому URL-адресу.

вы никогда надо:

  • <meta> с заголовками кэша - он вообще не работает. Абсолютно бесполезный.
  • post-check / pre-check - это директива IE-only, которая применяется только к cachable ресурсы.
  • отправка одного и того же заголовка дважды или в дюжине частей. Некоторые фрагменты PHP фактически заменяют предыдущие заголовки, в результате чего отправляется только последний.

если вы хотите, вы можете добавить:

как заявил porneL, вы хотите не деактивировать кэш, а деактивировать буфер истории. Различные браузеры имеют свои собственные тонкие способы отключения буфера истории.

в Chrome (v28.0.1500.95 м) мы можем сделать это только Cache-Control: no-store .

в FireFox (v23.0.1) любой из них будет работать:

в Safari (v5.1.7, 7534.57.2) любой из них будет работать:

Cache-Control: no-store
<body onunload=""> в html

In IE8 (v8.0.6001.18702 IC) любой из них будет работать:

Cache-Control: must-revalidate, max-age=0

Cache-Control: must-revalidate
Expires: 0

Cache-Control: must-revalidate
Expires: Sat, 12 Oct 1991 05:00:00 GMT

ниже показаны необработанные журналы моего тесты:

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="">
Fail: 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="">
Fail: 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: *
Fail: 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: *
Fail: Safari 5.1.7, Opera 12.15
Успех: Chrome 28, FireFox 23, ИЕ8

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
успех: ИЕ8

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
успех: ИЕ8

Cache-Control: no-store
Fail: Safari 5.1.7, Opera 12.15
успех: Chrome 28, FireFox 23, IE8

Cache-Control: no-store
<body onunload="">
Fail: 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
успех: ИЕ8

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
успех: ИЕ8

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
успех: ничего

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, Сафари 5.1.7, Опера 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, ИЕ8

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
Успех: Опера 12.15

Cache-Control: private, must-revalidate, proxy-revalidate, s-maxage=0
<body onunload="">
сбой: Chrome 28, FireFox 23, IE8, Сафари 5.1.7
Успех: Опера 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
Fail: 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="">
Fail: 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="">
Fail: 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
Fail: нет
успех: Chrome 28, FireFox 23, IE8, Safari 5.1.7, Opera 12.15

Я нашел в интернете.config route полезен (пытался добавить его в ответ, но, похоже, не был принят, поэтому разместите здесь)

и вот экспресс / узел.JS способ сделать то же самое:

после долгих исследований и тестирования я обнаружил, что мне действительно нужны только два заголовка:

на IE6-8, FF1.5-3.5, Chrome 2-3, Safari 4 и Opera 9-10, эти заголовки заставили страницу запрашиваться с сервера при нажатии на ссылку на страницу или поместить URL-адрес непосредственно в адресной строке. Это охватывает около 99% всех браузеров, используемых с января ' 10.

после небольшого исследования, мы придумали следующий список заголовков, которые, казалось, покрывали большинство браузеров:

  • истекает: Пн, 26 июля 1997 05:00: 00 GMT
  • Кэш-Контроля: нет-кэш, частного, должен-revalidate, max-stale=0, post-check=0, pre-check=0 no-store
  • Прагма: нет-кэш

использование заголовка pragma в ответе-это история жен. RFC2616 определяет его только как заголовок запроса

я попробовал "принятый" ответ для PHP, который не работал для меня. Затем я провел небольшое исследование, нашел небольшой вариант, протестировал его и это сработало. Вот это:

это должно сработать. Проблема заключалась в том, что при установке одной и той же части заголовка дважды, если false не отправляется в качестве второго аргумента функции заголовка, функция заголовка просто перезапишет предыдущий header() звонок. Итак, при установке Cache-Control , например, если вы не хотите помещать все аргументы в один header() вызов функции, он должен сделать что-то вроде этого:

посмотреть более полную документацию здесь.

в IE6 есть ошибка

содержимое с "Content-Encoding: gzip" всегда кэшируется, даже если вы используете "Cache-Control: no-cache".

вы можете отключить сжатие gzip для пользователей IE6 (проверьте агент пользователя для "MSIE 6")

эти директивы не уменьшают никакой риск для безопасности. Они действительно предназначены для того, чтобы заставить UA обновлять изменчивую информацию, а не удерживать UA от сохранения информации. См.этот же вопрос. По крайней мере, нет никакой гарантии, что все маршрутизаторы, прокси и т. д. также не будет игнорировать директивы кэширования.

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

на документация PHP для функции заголовка имеет довольно полный пример (предоставлено третьим лицом):

Если вы столкнулись с проблемами загрузки с IE6-IE8 через SSL и cache:no-cache header (и аналогичные значения) с файлами MS Office,вы можете использовать cache: private, no-store header и return file по запросу POST. Это работает.

в моем случае я исправляю проблему в chrome с помощью этого

где мне нужно очистить содержимое данных формы previus, когда пользователи нажимают кнопку назад по соображениям безопасности

затем зарегистрировать его в Startup.cs

убедитесь, что вы добавить это где-то после

У меня были лучшие и наиболее последовательные результаты во всех браузерах, установив Pragma: no-cache

принятый ответ, похоже, не работает для IIS7+, учитывая большое количество вопросов о заголовках кэша, которые не отправляются в II7:

принятый ответ Правильный, в котором заголовки должны быть установлены, но не в том, как они должны быть установлены. Этот способ работает с IIS7:

первая строка задает Cache-control to no-cache , а вторая строка добавляет другие атрибуты no-store, must-revalidate

кроме того, просто для хорошей меры, убедитесь, что вы сбросили ExpiresDefault в своем .htaccess файл, если вы используете это для включения кэширования.

после этого вы можете использовать ExpiresByType установить конкретные значения для файлов, которые вы хотите кэшировать:

это также может пригодиться, если ваши динамические файлы, например php и т. д. кэшируются браузером, и вы не можете понять, почему. Проверка ExpiresDefault .

Читайте также: