为了账号安全,请及时绑定邮箱和手机立即绑定

关于nginx的ETag的一些问题

关于nginx的ETag的一些问题

守着星空守着你 2018-07-23 23:13:14
关于nginx的Etag问题,nginx默认是有Etag的,但是问题就在于:无论你对源代码做了什么改动,比如说改动了注释,改动了空行什么的,ETag都会变。(但实际上,比如我改动了注释,但是这个注释可能对程序员很重要,对用户来讲是无所谓的,因此ETag是没有必要变化的)而http权威指南中说Etag解决了这个问题:有些文档可能被修改了,但所做修改并不重要,不需要让世界范围内的缓存都重装数据(比如对拼写或注释的修改)。而nginx默认也加了前缀“W/”来标识弱验证器那这样的话ETag显然没有解决这个问题。由于笔者对nginx停留在仅供使用的阶段,并没有源码查看和插件编写的经历,所以想问:nginx有没有办法配置或者现成的插件或者自定义增加一些内容,从而让ETag并不是任意更改都变化,有一定的变通性?或者说 nginx有没有办法自定义ETag的生成规则?
查看完整描述

2 回答

?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

正确的做法就是不要依赖etag验证文件是否被修改。
如果你要处理静态文件缓存的问题,应该在网页链接里加上特殊的请求参数好让浏览器以为链接改变从而重新请求最新版文件

如果你想要修改注释不引起etag变化,你应该配置好前端自动化流程,把生产环境运行的代码和开发的代码分开,然后一键压缩混淆去注释代码发布到生产环境


查看完整回答
反对 回复 2018-07-26
?
30秒到达战场

TA贡献1828条经验 获得超6个赞

这个最好不要去 nginx 那里去控制,可以在自动化构建的时候控制。比如,webpack 打包的时候就把注释都给去掉。另外也不要通过 ETag 来协商缓存,通过 webpack 设置 hash 来强制缓存。

补充:为什么不使用 Etag

  1. 你所列举的这种情况

  2. 协商缓存需要 304 ,仍需要发一次请求

  3. 负载均衡时,不同的物理机相同文件的 inode 不同,会生成不同的 ETag (未实测)


查看完整回答
反对 回复 2018-07-26
  • 2 回答
  • 0 关注
  • 1671 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信