json - 使用 nginx 的 Angular i18n json 缓存问题
问题描述
我在 de.json 和 en.json 等 json 文件中使用 angular 和 i18n 翻译。在我的生产环境(nginx)中,我遇到了这些 JSON 文件被 Web 浏览器缓存的问题。升级后,即使日期标头已更改,Chrome 也不会下载当前 json 文件的新版本。
请求信息(Chrome):
- 请求网址:https://[my-site]/assets/i18n/de.json
- 请求方法:GET
- 状态码:200(来自磁盘缓存)
- 远程地址:XXXX:443
- 推荐人政策:降级时无推荐人
响应标头:
- 内容编码:gzip
- 内容类型:应用程序/json
- 日期:格林威治标准时间 2019 年 2 月 15 日星期五 09:04:42
- etag:W/“5c62bf4d-2aea”
- 最后修改时间:格林威治标准时间 2019 年 2 月 12 日星期二 12:42:53
- 服务器:nginx/1.14.0 (Ubuntu)
- 状态:304
有没有人有这个问题的经验并且可以帮助我?
解决方案
不是专门针对 Angular/nginx 的修复,但我经常使用的一种做法是在加载资源时将查询字符串参数附加到资源。对我来说,这通常来自 .js 文件/应用程序的版本号,例如将其用作 RNG 的种子
所以,而不是:<script src="/assets/de.json" />
利用
<script src="/assets/de.json?_=12345" />
加分项——在您的 Angular 应用程序中,您可以跟踪要包含的资产版本,这意味着您可以发布新资产文件,而无需让客户端在本地缓存中立即更新它们(尽管请注意无论如何,新客户都将获得新版本)
推荐阅读
- javascript - 为什么我在我的应用程序中看不到自定义创建的 icomoon 图标?
- javascript - 如何在自定义列表组中的单击事件上添加活动类?
- django - 更新用户时检查电子邮件?
- python - 如何设计一棵树来提出问题以做出决定?
- reactjs - 使用 react-apollo 查询和突变组件将变量传递给 graphql 查询/突变时出错
- rust - 为什么 Mutex 被设计为需要 Rust 中的 Arc
- rxjs - 取消使用“fromEvent”创建的 observable 并切换到新的 observable
- laravel - Google Cloud 不提供我的静态文件
- docker - ms 构建抛出错误(仅适用于 docker)
- c++ - 为什么eclipse总是出现错误“An internal error occurred during: “Notifying selection listeners”.java.lang.StackOverflowError”