【问题标题】:ReactJS: How to prevent browser from caching static files?ReactJS:如何防止浏览器缓存静态文件?
【发布时间】:2019-01-02 14:40:36
【问题描述】:

我正在使用 ReactJS 处理我的项目,我使用 create-react-app 创建我的应用程序。构建项目后,我使用我的服务器为build 文件夹提供服务。当我更新我的应用程序时,用户的浏览器仍然使用我的应用程序的旧版本,因为它缓存了静态文件(js、css)。那么有什么办法可以防止浏览器缓存静态文件呢? 谢谢!

【问题讨论】:

标签: reactjs caching browser-cache create-react-app static-files


【解决方案1】:

TLDR:您需要通过 HTTP 标头发送缓存指令。

Cache-Control 标头有几个指令来控制缓存行为、过期和验证。

缓存行为:https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control

缓存控制:公共 资源可以被任何缓存缓存

缓存控制:私有 资源只能被浏览器缓存

缓存控制:无存储 将浏览器设置为始终从服务器请求资源

缓存控制:无缓存 这告诉浏览器缓存文件但不要使用它,直到它与服务器检查以验证我们是否拥有最新版本。此验证通过 ETag 标头完成。 (https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag)

【讨论】:

【解决方案2】:

创建反应应用程序提供服务工作者,这会在客户端缓存各种文件。 如果您愿意,您可以取消注册服务人员。 但请注意,您将无法像在 PWA 中那样在离线模式下为您的应用提供服务

【讨论】:

  • 优秀。谢谢!
【解决方案3】:

假设你禁用了你的 pwa,你可能想在你的 public/index.html 中添加这些行

<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />

【讨论】:

  • 现在不鼓励使用这样的元标记,并且不是有效的 HTML5。为什么?这不是一个好主意,因为只有浏览器才能解析元标记并理解它。中间缓存不会。始终通过 HTTP 标头发送缓存指令。
  • @vsync 但是当您不一定要进行 xhr 调用时,如何在页面上设置请求/响应标头?这些也是请求或响应标头吗?
猜你喜欢
  • 2019-07-12
  • 2017-02-06
  • 2013-02-09
  • 1970-01-01
  • 1970-01-01
  • 2019-09-21
  • 1970-01-01
  • 2020-08-03
  • 2018-05-28
相关资源
最近更新 更多