• 鄱阳湖花海:文明仍应成为最美风景 2019-09-13
  • 最后的骑兵:解放军高原骑兵腰挎马刀热血冬训 2019-09-13
  • 4类伤肝的水果尽量少吃 多吃这4种护肝的水果-美食资讯 2019-09-10
  • 泉州市开展“乡村记忆文化”项目建设三年行动 2019-09-08
  • 亚冠前瞻:恒大权健皆不容有失 两将伤情成上港争胜关键 2019-09-08
  • 国家知识产权战略实施十年成效显著 2019-08-23
  • 澳大利亚世界杯直播故障频发引球迷愤怒 总理出面 2019-08-23
  • 贯彻落实习近平生态文明思想 为建设美丽新疆作出人大贡献 2019-08-20
  • 起底人体胎盘黑市:倒卖团伙盘踞医院 每个可卖千元 2019-08-19
  • [鼓掌]小撸又来卖萌?那你给大家讲讲? 2019-08-17
  • 高清:探访广西高考阅卷现场 2019-08-12
  • 搭着发达国家的顺风车,实现赶、超、创。 2019-08-11
  • 重建社会:今天的中国人还需要祠堂吗? 2019-08-08
  • 美钢铝关税政策引发各界忧虑 2019-08-08
  • 【中国梦·践行者】社区规划师:他用一碗粥松动了人心之间的壁垒 2019-08-05

  • 您所在的位置:森林狼vs骑士 > 软件教程 > 网站运营 > 建站经验 > HTTP 304状态分析

    09年森林狼vs湖人国语:HTTP 304状态分析

    作者:  来源:  访问: 次 更新: 2013-12-31
    导 读:今天在查看web服务器日志的时候看到有很多304的http状态,为什么会返回304而不是200呢?这与服务器的缓存设置非常有关
    标 签:
    HTTP 304: Not Modified
    标准解释是:Not Modified 客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还可以继续使用。

    我们先来看下浏览器的工作原理:
    (1)直接在缓存中去获取内容。如果先前有效访问的响应头包含 Expires, max-age的话,“打开新窗口”、“输入URI回车”、“前一页”、“后一页”这些浏览器行为不会使浏览器在Expires, max-age设置的有效期时间内去访问服务器,而是在缓存中去获取内容,但是"刷新'"或"重载"例外。
    (2)访问服务器,根据服务器响应来获取内容。这种情况发生在设置no-cache等头标要求不缓存,或者是设置了 Expires,max-age但浏览器行为是“刷新”或“重载”时候。'Last-Modified'、'ETag'、'must-revalidate' 等有些特殊,不直接受浏览器行为影响,它们必须访问服务器后,再由服务器判断是直接发送新的资源,还是发送一个304 Not Modfied让浏览器使用缓存中的资源。

    如果客户端在请求一个文件的时候,发现自己缓存的文件有 Last Modified ,那么在请求中会包含 If Modified Since ,这个时间就是缓存文件的 Last Modified 。因此,如果请求中包含 If Modified Since,就说明已经有缓存在客户端。只要判断这个时间和当前请求的文件的修改时间就可以确定是返回 304 还是 200 。对于静态文件,例如:CSS、图片,服务器会自动完成 Last Modified 和 If Modified Since 的比较,完成缓存或者更新。但是对于动态页面,就是动态产生的页面,往往没有包含 Last Modified 信息,这样浏览器、网关等都不会做缓存,也就是在每次请求的时候都完成一个 200 的请求。
    因此,对于动态页面做缓存加速,首先要在 Response 的 HTTP Header 中增加 Last Modified 定义,其次根据 Request 中的 If Modified Since 和被请求内容的更新时间来返回 200 或者 304 。虽然在返回 304 的时候已经做了一次数据库查询,但是可以避免接下来更多的数据库查询,并且没有返回页面内容而只是一个 HTTP Header,从而大大的降低带宽的消耗,对于用户的感觉也是提高。

    如何测试HTTP状态,缓存是否有效?

    可以使用HttpWatch
    第一次访问 200
    鼠标点击二次访问 (Cache)
    按F5刷新 304
    按Ctrl+F5强制刷新 200
    如果是这样的就说明缓存真正有效了。

    对 HTTP 304 的理解

    最近和同事一起看Web的Cache问题,又进一步理解了 HTTP 中的 304 又有了一些了解。
    304 的标准解释是:Not Modified 客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还可以继续使用。
    如 果客户端在请求一个文件的时候,发现自己缓存的文件有 Last Modified ,那么在请求中会包含 If Modified Since ,这个时间就是缓存文件的 Last Modified 。因此,如果请求中包含 If Modified Since,就说明已经有缓存在客户端。只要判断这个时间和当前请求的文件的修改时间就可以确定是返回 304 还是 200 。对于静态文件,例如:CSS、图片,服务器会自动完成 Last Modified 和 If Modified Since 的比较,完成缓存或者更新。但是对于动态页面,就是动态产生的页面,往往没有包含 Last Modified 信息,这样浏览器、网关等都不会做缓存,也就是在每次请求的时候都完成一个 200 的请求。
    因此,对于动态页面做缓存加速,首先要在 Response 的 HTTP Header 中增加 Last Modified 定义,其次根据 Request 中的 If Modified Since 和被请求内容的更新时间来返回 200 或者 304 。虽然在返回 304 的时候已经做了一次数据库查询,但是可以避免接下来更多的数据库查询,并且没有返回页面内容而只是一个 HTTP Header,从而大大的降低带宽的消耗,对于用户的感觉也是提高。
    当这些缓存有效的时候,通过 HttpWatch 查看一个请求会得到这样的结果:

    第一次访问 200
    鼠标点击二次访问 (Cache)
    按F5刷新 304
    按Ctrl+F5强制刷新 200
    如果是这样的就说明缓存真正有效了。以上就是我对 HTTP 304 的一个理解。
    分享到:
    更多
    森林狼vs骑士| 森林狼vs骑士| 友情链接| 网站地图| 关于本站
    森林狼vs骑士
    本站资源来自网络,如有侵犯您的权宜,请联系站长删除! 滇ICP备11000673号-2
  • 鄱阳湖花海:文明仍应成为最美风景 2019-09-13
  • 最后的骑兵:解放军高原骑兵腰挎马刀热血冬训 2019-09-13
  • 4类伤肝的水果尽量少吃 多吃这4种护肝的水果-美食资讯 2019-09-10
  • 泉州市开展“乡村记忆文化”项目建设三年行动 2019-09-08
  • 亚冠前瞻:恒大权健皆不容有失 两将伤情成上港争胜关键 2019-09-08
  • 国家知识产权战略实施十年成效显著 2019-08-23
  • 澳大利亚世界杯直播故障频发引球迷愤怒 总理出面 2019-08-23
  • 贯彻落实习近平生态文明思想 为建设美丽新疆作出人大贡献 2019-08-20
  • 起底人体胎盘黑市:倒卖团伙盘踞医院 每个可卖千元 2019-08-19
  • [鼓掌]小撸又来卖萌?那你给大家讲讲? 2019-08-17
  • 高清:探访广西高考阅卷现场 2019-08-12
  • 搭着发达国家的顺风车,实现赶、超、创。 2019-08-11
  • 重建社会:今天的中国人还需要祠堂吗? 2019-08-08
  • 美钢铝关税政策引发各界忧虑 2019-08-08
  • 【中国梦·践行者】社区规划师:他用一碗粥松动了人心之间的壁垒 2019-08-05
  • 大乐透走势图40期 重庆时时存在操控 河北时时结果走势图 浙江二十选五带坐标走势图 北京时时走势图怎么看性别孕早期 河北麻将下载免费版 湖北十一选五开奖查询 内蒙11选5助手下载 天津时时时彩开奖结果 河北时时在线 澳客网比分直播 李逵劈鱼打鱼机 新时时在线 31选7近100期走势图 今天三d试机号 炸金花里面235大不大