我在网上找了一张杨澜的图片, 为什么是她呢? 因为我随便找的。
该图片的链接地址:http://g.hiphotos.baidu.com/baike/pic/item/29381f30e924b899b743be4f62061d950a7bf64e.jpg
浏览器访问图片,用fiddler抓包, 发现返回200, 然后f5刷新, 返回304, 最后ctrl + f5强制刷新,返回200.
且可以看到, 返回304时, body测长度为0, 为什么会这样? 来看看304的作用:
304 Not Modified
Indicates that the resource has not been modified since the version specified by the request headers If-Modified-Since or If-None-Match. In such case, there is no need to retransmit the resource since the client still has a previously-downloaded copy.
简要分析一下:
第一次访问时候, 本地没有图片的缓存, 所以需要完整返回图片内容, 且有一个时间字段:Last-Modified: Sun, 01 Apr 2018 01:30:37 GMT
第二次再访问的时候, 请求中会有:If-Modified-Since: Sun, 01 Apr 2018 01:30:37 GMT , 浏览器的请求发送到服务器后, 服务器发现资源并没有变化, 所以无需重复传递图片内容, 只需给个not modified的状态码即可, 也就是304.
第三次访问, 强制刷新, 请求中是不会携带If-Modified-Since: Sun, 01 Apr 2018 01:30:37 GMT的, 所以服务端认为这是一个新的请求,需要返回图片的完整内容。
好了, 不多说。