Chrome 正在缓存 API 响应,而 Safari 没有
Posted
技术标签:
【中文标题】Chrome 正在缓存 API 响应,而 Safari 没有【英文标题】:Chrome is Caching API response while Safari does not 【发布时间】:2017-03-22 15:59:18 【问题描述】:我使用 Mac OS X 和 Chrome 制作了一个带有 Django Rest Framework 后端的 React 应用程序。当我几次刷新应用程序时,应用程序停止进行 API 调用并开始使用缓存数据,即使我有 no-cache
和 max-age
标头。有趣的是,如果开发者工具窗口是打开的,它总是调用 API 并且不使用缓存的数据。有没有办法强制应用始终进行 API 调用,无论开发工具是否打开?
我已经做了很多事情来解决这个问题。我添加了一个查询参数,其中包含秒数,例如this SO link says to do。
我还在 DRF mentioned here 上添加了 Profiling。
奇怪的是,在一些 API 调用之后我在 Django 端看不到日志,这对我来说意味着 Chrome 正在缓存一些东西。
我在 Safari 中看不到这种行为。
我还创建了一个简单的 JQuery 应用程序,并在那里看到了这种行为,所以我认为这不是 React/Fetch 问题。
它确实不一致,因此很难排除故障。
编辑
这是显示缓存控制的标题,我仍然遇到这种情况:
HTTP/1.1 200 OK
Server: gunicorn/19.3.0
Date: Wed, 09 Nov 2016 16:39:07 GMT
Connection: close
Transfer-Encoding: chunked
Expires: Wed, 09 Nov 2016 16:39:07 GMT
Last-Modified: Wed, 09 Nov 2016 16:39:07 GMT
Allow: GET, POST, HEAD, OPTIONS
Cache-Control: no-cache, no-store, must-revalidate, max-age=0
Access-Control-Allow-Origin: *
Content-Type: application/json
Request Headers
view source
【问题讨论】:
How to stop chrome from caching REST response from WebApi?的可能重复 【参考方案1】:直接来自 (How to stop chrome from caching REST response from WebApi?)
答案是 Chrome 不喜欢“Expires:Mon, 01 Jan 0001 00:00:00 GMT”(基本上是假日期)。
我将日期更改为他们在他们的 Google API 中使用的日期,并且成功了:
Cache-Control:no-store, must-revalidate, no-cache, max-age=0
Content-Length:1897
Content-Type:application/json; charset=utf-8
Date:Fri, 19 Jul 2013 20:51:49 GMT
Expires:Mon, 01 Jan 1990 00:00:00 GMT
Pragma:no-cache
Server:Microsoft-IIS/8.0
【讨论】:
请将此问题标记为与其他问题重复,而不是把别人的答案归功于他人。 完成!谢谢,没想到。 这不是我的问题,我已经更新了我的问题以显示我的响应标题以上是关于Chrome 正在缓存 API 响应,而 Safari 没有的主要内容,如果未能解决你的问题,请参考以下文章