1. ホーム
  2. javascript

Angular 2でIE11のGET呼び出しをキャッシュしないようにする

2023-08-30 07:55:02

質問

私はGET呼び出しでリストを返す残りのエンドポイントを持っています。私はまた、新しいアイテムを追加するためのPOSTエンドポイントとそれらを削除するためのDELETEを持っています。これは、Firefox と Chrome で動作し、POST と DELETE は IE11 で動作します。しかし、IE11でのGETは、ページの最初の読み込み時のみ動作します。更新するとキャッシュされたデータが返されます。私はAngular 1でこの動作についての投稿を見たことがありますが、Angular 2(リリース候補1)については何もありません。

どのように解決するのですか?

今日、私はまた、この問題があった、(くそIE)。 私のプロジェクトでは、私は httpclient を使用していますが、これには BaseRequestOptions . 私たちは Http_Interceptor を使って解決しましょう!

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<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 }
    ]
})