Http 为什么不是';浏览器是否与缓存控制头相关?
我在S3上有一个图像,它的Http 为什么不是';浏览器是否与缓存控制头相关?,http,caching,browser-cache,cache-control,Http,Caching,Browser Cache,Cache Control,我在S3上有一个图像,它的缓存控制头设置为public,max age=3600。因此,下游系统(代理、浏览器等)应将其缓存1小时 我可以看到浏览器在后续请求后返回304(未修改) 然后,我在S3上更新了该图像(资源没有版本控制..URL没有更改,只是_内容),但浏览器运行并获得了新版本。(例如HTTP 200) 以下是chrome网络流量: 要求: 200(好的) 304(未修改) ~z~幕后形象发生了变化~ 200(好的) 304(未修改) 以下是响应标题: 这怎么可能?我没有设置正确的
缓存控制
头设置为public,max age=3600
。因此,下游系统(代理、浏览器等)应将其缓存1小时
我可以看到浏览器在后续请求后返回304(未修改)
然后,我在S3上更新了该图像(资源没有版本控制..URL没有更改,只是_内容),但浏览器运行并获得了新版本。(例如HTTP 200)
以下是chrome网络流量:
要求:
谢谢 响应中指定了
ETag
规范中对ETag
进行了解释
实体标记可以比修改更可靠地进行验证
不方便存储修改的情况下的日期日期,其中HTTP日期值的1秒分辨率不是
足够,或修改日期不一致
维持 所以浏览器更喜欢它,而不是基于日期的过期 因此,您的浏览器每次都会发出请求,除非内容已更改,否则返回http 304。否则,它是http 200 如果您只需要基于时间的过期-删除
ETag
参考资料:
max age
“如果你有一个ETag,甚至设置最大年龄都没有意义”——是的,我会说,但是为什么我的浏览器仍然会转到服务器,即使是304?它不应该说(从磁盘缓存)?(例如我问题中的第2点)。什么情况下它不会进入服务器?@RPM1984每次出现ETag
都会让它进入服务器。“它不应该说(从磁盘缓存)?”---它不应该说,因为响应是从带有HTTP 304的服务器提供的,只有内容来自磁盘缓存。http 304暗示内容来自缓存。尽管@zerkms给出了一个很好的答案,但这个很好的答案为故事添加了一些额外的内容: