缓存控制标头不适用于IE11

问题描述 投票:0回答:1

有人可以向我解释IE11的行为吗?

据我所知,所有支持Http 1.1的浏览器(某些带有错误的版本除外,都支持Cache-Control标头。

我的后端只有Access-Control-Request-HeadersCache-ControlIf-Modified-Since,所以我不能使用ExpiresPragma。就我而言,IE11的行为很奇怪。

Cache-Control的任何指令在IE11中对我都不起作用。 IE11只是缓存带有此类标头的所有请求:

  • Cache-Control: no-cache
  • Cache-Control: no-store, no-cache
  • Cache-Control: no-cache, max-age=0
  • Cache-Control: no-store, no-cache, max-age=0, must-revalidate
  • 和任何其他指令组合。

有趣的事实,仅添加If-Modified-Since: 0就解决了我的问题。

为什么IE11(我在很多PC上都尝试过)完全忽略了Cache-Control,而只是缓存了所有数据?

请求的标题:

   Accept: */*
   Accept-Encoding: gzip, deflate
   Access-Control-Request-Headers: cache-control, expires, accept-language, x-website-token, authorization, x-website-config, accept
   Access-Control-Request-Method: GET
   Cache-Control: no-cache
   Content-Length: 0
   Host: ----
   Origin: ----
   User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko

响应的标题:

   access-control-allow-credentials: false
   access-control-allow-headers: DNT, User-Agent, X-Website-Token, X-Website-Config, X-Website-Dgp, X-Integration-Id, X-Requested-With, If-Modified-Since, Cache-Control, Content-Type,Range, Accept, Accept-Language, Authorization, DNT
   access-control-allow-methods: GET, POST, PUT, PATCH, DELETE, OPTIONS
   access-control-allow-origin: *
   access-control-expose-headers: X-Pagination-Total-Count, X-Pagination-Page-Count, X-Pagination-Current-Page, X-Pagination-Per-Page
   access-control-max-age: 3600
   content-type: application/json; charset=UTF-8
   date: Sat, 13 Jun 2020 23:01:32 GMT
   server: nginx/1.16.1
   set-cookie: x-last-referrer=;Domain=-----;Path=/;
   x-release-version: 1
internet-explorer caching internet-explorer-11 browser-cache cache-control
1个回答
0
投票

我发现行为取决于标题类型。

如果我将cache-control用作请求的标头,则对于所有浏览器,我都有奇怪的行为。例如,chrome忽略cache-control指令以外的所有no-cache指令。当我使用no-cache指令时,Chrome无法缓存请求。 IE只是忽略cache-control的所有指令(如果它是请求的标头)。因此,请求的标头用于中间代理,但与响应的缓存没有任何连接。

但是如果我将缓存控制用作响应的标头,则我的行为正确,任何指令都可以正常工作。

就我而言,由于我没有访问权限,因此我无法更改REST API并在响应中添加cache-control: no-cache。但是我可以说随时使用请求的标头If-Modified-Sinse: 0重新验证缓存的响应。

© www.soinside.com 2019 - 2024. All rights reserved.