У меня есть конечная точка отдыха, которая возвращает список при вызове GET. У меня также есть конечная точка POST для добавления новых элементов и DELETE для их удаления. Это работает в Firefox и Chrome, а POST и DELETE работают в IE11. Однако GET в IE11 работает только при начальной загрузке страницы. Обновление данных кэшируется. Я видел сообщение об этом поведении в Angular 1, но ничего для Angular 2 (кандидат на выпуск 1).Предотвращение кэширования IE11 GET-вызов в Angular 2
ответ
Как ответил here, вы можете просто переопределить RequestOptions
добавить заголовки необходимо:
import { Injectable } from '@angular/core';
import { BaseRequestOptions, Headers } from '@angular/http';
@Injectable()
export class CustomRequestOptions extends BaseRequestOptions {
headers = new Headers({
'Cache-Control': 'no-cache',
'Pragma': 'no-cache',
'Expires': 'Sat, 01 Jan 2000 00:00:00 GMT'
});
}
Модуль:
@NgModule({
...
providers: [
...
{ provide: RequestOptions, useClass: CustomRequestOptions }
]
})
Это отличное решение для того, чтобы сделать все запросы с углового запроса без кеша, однако я не хочу этого поведения для всех запросов, так как некоторые запросы могут быть кэшированы просто отлично. Я пошел с настройкой соответствующей серверной части заголовков. Я бы предпочел, чтобы у сервера были кеширующие смартфоны. Возможно, я неправильно сформулировал этот вопрос. – cmaynard
@cmaynard Я столкнулся с вашим вопросом, глядя на то, как настроить глобальное кэширование для Andular, поэтому с точки зрения Google ваша формулировка идеально подходит для поиска чего-то ищущего :) –
Вперед ответ от stackoverflow Angular IE Caching issue for $http вы должны добавить заголовки «Pragma», «no-cache», «If-Modified-Since» для каждого запроса «GET».
Сценарий перехватчика больше не поддерживается угловым 2. Поэтому вы должны расширить http, как описано здесь What is httpinterceptor equivalent in angular2?.
Угловой 4.3 теперь включает в себя услугу HttpClient, которая поддерживает перехватчики.
Немного поздно, но я столкнулся с той же проблемой. Для Angular 4.X Я написал пользовательский класс Http для добавления случайного числа до конца, чтобы предотвратить кеширование IE. Он основан на 2-й ссылке по димерам (What is httpinterceptor equivalent in angular2?). Предупреждение: не гарантируется 100% ошибка.
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import { Http, Response, XHRBackend, RequestOptions, RequestOptionsArgs,
URLSearchParams } from '@angular/http';
@Injectable()
export class NoCacheHttp extends Http {
constructor(backend: XHRBackend, options: RequestOptions) {
super(backend, options);
}
get(url: string, options?: RequestOptionsArgs): Observable<Response> {
//make options object if none.
if (!options) {
options = { params: new URLSearchParams() };
}
//for each possible params type, append a random number to query to force no browser caching.
//if string
if (typeof options.params === 'string') {
let params = new URLSearchParams(options.params);
params.set("k", new Date().getTime().toString());
options.params = params;
//if URLSearchParams
} else if (options.params instanceof URLSearchParams) {
let params = <URLSearchParams>options.params;
params.set("k", new Date().getTime().toString());
//if plain object.
} else {
let params = options.params;
params["k"] = new Date().getTime().toString();
}
return super.get(url, options);
}
}
Я использовал эту технику в прошлом, чтобы «обмануть» кеширование. Я думаю, что это полезно, но обычно лучше устанавливать соответствующие заголовки. – cmaynard
Сегодня я также имел эту проблему, (черт IE) , В моем проекте я использую httpclient
, который не имеет BaseRequestOptions
. Чтобы решить эту проблему, мы должны использовать Http_Interceptor
.
export class CustomHttpInterceptorService implements HttpInterceptor {
intercept(req: HttpRequest<any>, next: HttpHandler):
Observable<HttpSentEvent | HttpHeaderResponse | HttpProgressEvent | HttpResponse<any> | HttpUserEvent<any>> {
const nextReq = req.clone({
headers: req.headers.set('Cache-Control', 'no-cache')
.set('Pragma', 'no-cache')
.set('Expires', 'Sat, 01 Jan 2000 00:00:00 GMT')
.set('If-Modified-Since', '0')
});
return next.handle(nextReq);
}
модуль обеспечивает
@NgModule({
...
providers: [
...
{ provide: HTTP_INTERCEPTORS, useClass: CustomHttpInterceptorService, multi: true }
]
})
Спасибо, это правильный ответ для Angular 5. Однако с тех пор Я определил Угловое 2 в исходном вопросе, я оставлю этот ответ, помеченный правильно для этого вопроса, имеет upvote! – cmaynard
- 1. Предотвращение кэширования изображений в MVC 2 C#
- 2. предотвращение кэширования/компиляции шаблона Smarty 2
- 3. Предотвращение кэширования iframe в Chrome
- 4. Предотвращение кэширования файлов CSS
- 5. Предотвращение кэширования процессора?
- 6. Предотвращение кэширования данных dataTable
- 7. Предотвращение кэширования IE
- 8. Предотвращение кэширования формы
- 9. Предотвращение кэширования изображений
- 10. Предотвращение кэширования extrenalhit
- 11. Предотвращение кэширования файлов браузера
- 12. Предотвращение кэширования ответа ajax
- 13. Предотвращение кэширования в форме submit
- 14. Предотвращение гибкого кэширования внешнего ресурса
- 15. Предотвращение кэширования на Img/карте
- 16. IE11 flexbox предотвращение переноса текста?
- 17. Предотвращение кэширования IE AngularJS/Restangular
- 18. Предотвращение кэширования импортированных модулей Python
- 19. предотвращение кэширования пользовательской сессии пользователя
- 20. Предотвращение частичного кэширования веб-ресурсов
- 21. Предотвращение кэширования динамического (php) контента
- 22. Предотвращение кэширования браузера связанного файла
- 23. Предотвращение кэширования DNS-записей сайта
- 24. Grails - предотвращение кэширования измененных ресурсов
- 25. Предотвращение кэширования файлов сайта ASP.NET
- 26. Предотвращение кэширования изображений на веб-странице
- 27. Предотвращение кэширования браузером запросов PHP
- 28. Предотвращение кэширования при загрузке изображений
- 29. Предотвращение NSURLSession от ответов кэширования
- 30. Предотвращение Rails 2/3 из кэширования Lib/Classes
Если GET апи не определяет заголовок управления Cache -> Это означает, что ответ кэшируется, если состояние 200 OK. – Loc
См. Также http://stackoverflow.com/questions/36500804/proper-way-to-prevent-angular2-http-request-caching-in-internet-explorer-ie для обхода на стороне клиента. –
@Loc Я добавил значения Cache-Control no-store и no-cache и все равно получаю одинаковый результат только в IE. – cmaynard