Prevent IE11 caching GET call in Angular 2

前端 未结 7 644
甜味超标
甜味超标 2020-11-28 09:19

I have a rest endpoint that returns a list on a GET call. I also have a POST endpoint to add new items and a DELETE to remove them. This works in Firefox and Chrome, and the

7条回答
  •  南方客
    南方客 (楼主)
    2020-11-28 09:38

    Edit: See comment below - this is not necessary (in the vast majority of cases).

    Expanding on Jimmy Ho's answer above, I only want to prevent caching of my API calls, and not other static content which will benefit from being cached. All of my API calls are to URLs that contain "/api/", so I amended Jimmy Ho's code with a check that only adds the cache headers if the requested URL contains "/api/":

    import { HttpHandler,
        HttpProgressEvent,
        HttpInterceptor,
        HttpSentEvent,
        HttpHeaderResponse,
        HttpUserEvent,
        HttpRequest,
        HttpResponse } from '@angular/common/http';
    import { Observable } from 'rxjs/Observable';
    
    export class CustomHttpInterceptorService implements HttpInterceptor {
        intercept(req: HttpRequest, next: HttpHandler):
        Observable | HttpUserEvent> {
        // Only turn off caching for API calls to the server.
        if (req.url.indexOf('/api/') >= 0) {
            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);
        } else {
            // Pass the request through unchanged.
            return next.handle(req);
        }
    }
    

    }

提交回复
热议问题