【发布时间】:2014-01-08 20:25:32
【问题描述】:
我从服务器请求图像。有时它返回状态码为 304 的图像,有时返回状态码为 200。服务器如何决定返回哪个状态码?手册指出,如果文件没有被修改,则返回 304 - 但我不明白:修改与哪个版本相比,与哪个请求相比,等等? 请详细说明。
【问题讨论】:
标签: apache webserver http-status-codes
我从服务器请求图像。有时它返回状态码为 304 的图像,有时返回状态码为 200。服务器如何决定返回哪个状态码?手册指出,如果文件没有被修改,则返回 304 - 但我不明白:修改与哪个版本相比,与哪个请求相比,等等? 请详细说明。
【问题讨论】:
标签: apache webserver http-status-codes
让我用一个例子来说明。以下是您的图片缩略图的请求和响应标头。
Request URL:https://www.gravatar.com/avatar/37c44d25d19d63d3107a8c7154568060?s=32&d=identicon&r=PG
Request Method:GET
Status Code:304 Not Modified
Request Headers
Accept:image/webp,*/*;q=0.8
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Cache-Control:max-age=0
Connection:keep-alive
Cookie:__qca=P0-584450804-1358798303046
Host:www.gravatar.com
If-Modified-Since:Wed, 11 Jan 1984 08:00:00 GMT
Referer:http://stackoverflow.com/questions
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36
Response Headers
Accept-Ranges:bytes
Access-Control-Allow-Origin:*
Cache-Control:max-age=300
Date:Wed, 08 Jan 2014 20:27:08 GMT
Expires:Wed, 08 Jan 2014 20:32:08 GMT
Last-Modified:Wed, 11 Jan 1984 08:00:00 GMT
Server:ECS (sea/1C32)
Via:1.1 varnish
X-Cache:HIT
X-Varnish:1925324757 1925322482
如您所见,服务器使用请求标头中的If-Modified-Since 字段来决定是简单地返回304,还是在此日期之后修改文件时返回新内容以及200。
【讨论】:
If-Modified-Since 属性,对吧?因此,如果浏览器没有缓存文档(例如第一次请求它),那么它不会在标题中指定If-Modified-Since 并且会从服务器获得状态码 200?一旦收到文件,它就会缓存它,随后的请求很可能包含该属性?
【讨论】: