静态图片托管在七牛,想实现200 ok (from cache) 而不是 304 not modified

静态图片托管在七牛,想实现200 ok (from cache) 而不是 304 not modified
有什么办法移除ETag么?
如果移除Etag响应,浏览器应该就不会再向服务器发送请求确认了,直接就是读缓存。

阅读 4.4k
2 个回答
  1. 200 from cache 的首要触发条件是图片需要嵌入在html页面中,同时不是刷新页面(而是直接在页面中跳转 或者 浏览器重新键入页面地址),如果使用 ctrl(cmd)+R 或者 F5 进行强制刷新,那么无论是什么网站,那么图片的请求都会是 304,如果是 ctrl(cmd)+shift+R 那么都会是 200 的重新请求;

  2. 所以只要在页面中跳转,或者在地址栏重新键入地址,那么大量的资源请求,都会被浏览器主动拦截,请求状态码为 200 from cache,其中 200 from cache 和之前的 304 请求的请求头部信息并没有实质的改变;

  3. 当使用 F5 等方式刷新后,taobao仍然有部分的图片可以是 200 from cache,这部分图片的请求的 initiator 基本是 js 或者 css,并不是直接嵌入在html页面中,而是通过 js 或者 css 进行加载,具体加载方式由于 taobao中该部分图片的引用方式被隐藏,所以并不好确定他们的优化方式;

  4. 查看了taobao的kissy框架,也看了前端对 200 from cache 和 304 区别的文章,同时也反复看了 HTTP RFC 中,关于 cache-control 头部和 expires 头部的描述,能够发现的事,本质上这 200 from cache 这种客户端对请求的拦截行为,是前端设计的优化行为,和服务端头部关系并不是很大,从第1点和第2点可以看出,另外http://www.zhihu.com/question/20790576这篇文章中也简单说了下具体怎么设计前端页面才能保证 200 from cache;

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进