【问题标题】:image request - response status 200 or 304图像请求 - 响应状态 200 或 304
【发布时间】:2014-01-08 20:25:32
【问题描述】:

我从服务器请求图像。有时它返回状态码为 304 的图像,有时返回状态码为 200。服务器如何决定返回哪个状态码?手册指出,如果文件没有被修改,则返回 304 - 但我不明白:修改与哪个版本相比,与哪个请求相比,等等? 请详细说明。

【问题讨论】:

    标签: apache webserver http-status-codes


    【解决方案1】:

    让我用一个例子来说明。以下是您的图片缩略图的请求和响应标头。

    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?一旦收到文件,它就会缓存它,随后的请求很可能包含该属性?
    • 在我之前的评论中有什么问题是我的问题吗?
    • 谢谢你,你帮了很多忙! :)
    【解决方案2】:

    参考资料:

    RFC

    Real world explanation

    实际上,如果您发送了 If_Modified_Since 标头,您应该只收到 304。

    【讨论】:

      猜你喜欢
      • 2019-05-08
      • 2017-10-31
      • 2011-08-13
      • 2018-03-23
      • 1970-01-01
      • 2016-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多