How to disable caching with HttpClient get in Angular 6 How to disable caching with HttpClient get in Angular 6 angular angular

How to disable caching with HttpClient get in Angular 6


Using meta HTML tags, Disable browser caching:-

<meta http-equiv="cache-control" content="no-cache, must-revalidate, post-check=0, pre-check=0"><meta http-equiv="expires" content="0"><meta http-equiv="pragma" content="no-cache">

or,

Add headers in http request as:-

headers = new Headers({        'Cache-Control':  'no-cache, no-store, must-revalidate, post-                             check=0, pre-check=0',        'Pragma': 'no-cache',        'Expires': '0'    });


HTTPInterceptors are great way to modify HTTP requests occurring in your application. It acts as an injectable service that can invoke when HttpRequest occurs.

HTTP Interceptor:

import { Injectable } from '@angular/core';import { HttpInterceptor, HttpRequest, HttpHandler, HttpHeaders } from '@angular/common/http';@Injectable()export class CacheInterceptor implements HttpInterceptor {  intercept(req: HttpRequest<any>, next: HttpHandler) {    const httpRequest = req.clone({      headers: new HttpHeaders({        'Cache-Control': 'no-cache',        'Pragma': 'no-cache',        'Expires': 'Sat, 01 Jan 2000 00:00:00 GMT'      })    });    return next.handle(httpRequest);  }}

Using Interceptor:

import { NgModule } from '@angular/core';import { BrowserModule } from '@angular/platform-browser';import { FormsModule } from '@angular/forms';import { AppComponent } from './app.component';import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';import { CacheInterceptor } from './http-interceptors/cache-interceptor';@NgModule({  imports:      [ BrowserModule, FormsModule ],  declarations: [ AppComponent ],  bootstrap:    [ AppComponent ],  providers: [    { provide: HTTP_INTERCEPTORS, useClass: CacheInterceptor, multi: true }  ]})export class AppModule { }


As answered by Pramod, you can use http request interceptor to modify or set a new header on the request.Below is a much simpler way of setting headers on http request interceptor for Later angular versions(Angular 4+). This approach would only set or update a certain request header. This is to avoid removing or overriding some important headers like the authorization header.

// cache-interceptor.service.tsimport { Injectable } from '@angular/core';import {  HttpInterceptor,  HttpRequest,  HttpHandler,} from '@angular/common/http';@Injectable()export class CacheInterceptor implements HttpInterceptor {  intercept(req: HttpRequest<any>, next: HttpHandler) {    const httpRequest = req.clone({      headers: req.headers        .set('Cache-Control', 'no-cache')        .set('Pragma', 'no-cache')        .set('Expires', 'Sat, 01 Jan 2000 00:00:00 GMT')    })    return next.handle(httpRequest)  }}// app.module.ts  import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http'  import { CacheInterceptor } from './cache-interceptor.service';  // on providers  providers: [{ provide: HTTP_INTERCEPTORS, useClass: CacheInterceptor, multi: true }]