Все ajax-вызовы, отправляемые из IE, кэшируются Angular, и я получаю a 304 response
для всех последующих вызовов. Хотя запрос такой же, ответ не будет таким же в моем случае. Я хочу отключить этот кеш. Я попытался добавить в cache attribute
$ http.get, но все равно это не помогло. Как можно решить эту проблему?
javascript
caching
angularjs
Рахул
источник
источник
If-Modified-Since
заголовке IIS + марка iisnode бросок 400 Bad Request для каждого HTML файла , загруженного черезngInclude
иngView
. Следующие два заголовка исправили эту проблему для меня (я вытащил их из Chrome, у которого не было проблемы с кэшированием):$httpProvider.defaults.headers.get['Cache-Control'] = 'no-cache';
$httpProvider.defaults.headers.get['Pragma'] = 'no-cache';
If-Modified-Since = "0"
заголовка ломает Tomcat (проблема с разбором даты заголовка, так как0
недопустимое значение RFC ). Исправлено использование значенияMon, 26 Jul 1997 05:00:00 GMT
вместо.Вы можете добавить уникальную строку запроса (я думаю, именно это jQuery делает с опцией cache: false) к запросу.
Возможно, лучшим решением будет то, что если у вас есть доступ к серверу, вы можете убедиться, что для предотвращения кэширования установлены необходимые заголовки. Если вы используете
ASP.NET MVC
этот ответ, может помочь.источник
$http.get(url+ "?"+new Date().toString())
это просто другое представление, без использования параметра, но добавление его в строку запроса.Вы можете добавить перехватчик.
Вы должны удалить строки console.log после проверки.
источник
$log
в случае, если вы забудете вынуть их.Я просто добавил три мета-тега в index.html для углового проекта, и проблема с кешем была решена в IE.
источник
index.html
когда мы заметили, что IE11 кэширует AJAX-запросы: / Но настройка,$httpProvider
как показано в других ответах, работала нормально.Дублирую мой ответ в другой ветке .
Для Angular 2 и новее самый простой способ добавить
no-cache
заголовки, переопределивRequestOptions
:И сослаться на это в вашем модуле:
источник
If-Modified-Since
с какой-то датой в далеком прошлом, используя описанный выше метод.)headers: req.headers .set('Cache-Control', 'no-cache') .set('Pragma', 'no-cache') .set('Expires', 'Sat, 01 Jan 2000 00:00:00 GMT')
Гарантированный, что я работал, был чем-то вроде этого:
Я должен был объединить 2 из вышеуказанных решений для того , чтобы гарантировать правильное использование всех методам, но вы можете заменить
common
сget
или другим методом , то естьput
,post
,delete
чтобы сделать эту работу для различных случаев.источник
if (!$httpProvider.defaults.headers.get) { $httpProvider.defaults.headers.common = {}; }
["If-Modified-Since"] = "0"
является незаконным и с генерацией плохого запроса на некоторых бэкэндах. это должно быть свидание.Мне помогла только эта строка (Angular 1.4.8):
UPD: проблема в том, что IE11 делает агрессивное кэширование. Когда я заглянул в Fiddler, я заметил, что в режиме F12 отправляются запросы "Pragma = no-cache", и конечная точка запрашивается при каждом посещении страницы. Но в обычном режиме конечная точка запрашивалась только один раз при первом посещении страницы.
источник
Чтобы избежать кеширования, можно указать разные URL-адреса для одного и того же ресурса или данных. Чтобы создать другой URL, вы можете добавить случайную строку запроса в конец URL. Этот метод работает для запросов AJAX JQuery, Angular или других типов.
источник
Я получаю это решенное добавление даты и времени как случайного числа:
источник
Решение, приведенное выше, будет работать (сделайте URL уникальным, добавив в строку запроса новый параметр), но я предпочитаю решение, предлагаемое [здесь]: Лучший способ предотвратить кеширование IE в AngularJS?, которые обрабатывают это на уровне сервера, поскольку это не относится к IE. Я имею в виду, что если этот ресурс не должен быть кэширован, делайте это на сервере (это никак не связано с используемым браузером; это сложно для ресурса).
Например, в java с JAX-RS сделайте это программно для JAX-RS v1 или декларативно для JAX-RS v2.
Я уверен, что кто-нибудь поймет, как это сделать
источник
Это немного по-старому, но: решения вроде устарели. Пусть сервер обрабатывает кеш или не кеш (в ответе). Единственный способ гарантировать отсутствие кэширования (думать о новых версиях в производстве) - это заменить файл js или css номером версии. Я делаю это с помощью веб-пакета.
источник
Также вы можете попробовать в вашем серве установить заголовки, например:
источник
Правильное решение на стороне сервера: лучший способ предотвратить кеширование IE в AngularJS?
источник
Эта проблема связана с проблемой кэширования IE, как вы сказали, вы можете протестировать ее в режиме отладки IE, нажав клавишу f12 (в режиме отладки это будет нормально работать) .IE не будет принимать данные сервера при каждом вызове страницы, это займет данные из кеша. Чтобы отключить это, выполните одно из следующих действий:
// До (выдан)
this.httpService.get (this.serviceUrl + "/eAMobileService.svc/ValidateEngagmentName/" + engagementName, {})
// После (работает нормально)
this.httpService.get (this.serviceUrl + "/eAMobileService.svc/ValidateEngagmentName/" + engagementName + "? DateTime =" + new Date (). getTime () + '', {cache: false})
$ httpProvider.defaults.headers.common ['Pragma'] = 'no-cache';
источник
Я просто добавил это в View, и он начал работать в IE. Подтвердили работу на Angular 2.
источник
Одним из вариантов является использование простого подхода - добавление метки времени при каждом запросе без необходимости очищать кэш.
источник
Попробуйте это, у меня получилось в похожем случае: -
источник