或者

图片HTTP头信息的设置

作者:小鸡炖蘑菇 浏览:1185 发布时间:2018-04-02
分享 评论 0

这个图片HTTP头信息的设置是这样的:


但是因为一些已知的BUG,我们在IE7和IE8中把两个属性替换成了下面这样:


当浏览器发送请求给图片时候,将会发生两件事情:


1.因为浏览器从来没有打开过这张图片,所以没有额外的头信息,服务器将返回一个状态码:200 Success 接着返回图片数据给浏览器,之后浏览器会缓存文件的HTTP头信息当中的Last-Modified(文件最后修改时间)和ETag(被请求变量的实体值)2.浏览器检查if-none-match或者if-modified-since头信息,如果之前有打开过.将会不加载图片数据直接返回Status:304 Not Modified(没有更新).同时我们把Last-Moidified头信息用$header["if-modified-since"]替换掉$now(),所以每次返回的内容都将是一样的.


现在剩下问题是我们在哪里应用这张图片,最后我们决定在Facebook的搜索条下面包含一个img标签,这样每次facebook加载的时候都会渲染这张图片.在整个页面重新加载的时候,资源将会根据缓存的头信息进行加载.这将是最好的方式来测试我们的想法.


在确保endpoint可以正常记录请求、图片标签可以正常访问了之后,我们正式开始了这次研究!


研究结果:


在数周的数据收集之后,我们决定来研究一下7天最后比较有价值的数据.数据的统计结果依旧让我们感到吃惊:依旧有的请求是空缓存的.为了让数据看起来更清晰,我们分隔了PC和手机的统计数据,但是数据依旧差不多:PC有而手机端有是空缓存的.这个结果不太符合我们预期,所以我们更加深入的研究了这个数据.


把PC端的浏览器分开来统计可能更加清楚:


根据上面一周的数据来看:用户用chrome和opera缓存的几率更大.你可能注意到你这个图表中并没有firefox浏览器的数据,那是因为firefox 31版本以及更早期的版本在我们的统计中有80%的缓存概率,但是在32版本和更高的版本当中有很明显的下降.那是因为firefox的缓存策略和我们的统计方法有点冲突(),所以我们就干脆去掉了firefox浏览器的数据统计.