HTTP 304状态分析

所属分类: 网站运营 / 建站经验 阅读数: 85
收藏 0 赞 0 分享
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 的一个理解。
更多精彩内容其他人还在看

医疗行业怎么做好网站建设?建站注意事项及经验

踏足互联网,医疗行业可以将自身优势资源整合到网站中去,为大家提供病理知识、在线咨询或者预约就诊服务等。那么如何做好医疗行业的网站建设呢?本期为大家分享一些在建站过程中需要注意的东西和建站经验,希望能给大家带来帮助
收藏 0 赞 0 分享

企业应该怎么策划自己的网站?规划网站注意事项总结

网站建设虽然是一个比较复杂的过程,包括网站策划、网页设计、程序开发、上传网页、发布网站等,那么企业应该怎么策划自己的网站?下面为大家介绍规划网站注意事项,来看看吧
收藏 0 赞 0 分享

大众点评网站的支付系统构建经验分享

大众点评网站的服务器端在迭代的同时保持了很好的扩展性和可用性,这里我们来看一下大众点评网站的支付系统构建经验分享,主要以大众点评的支付渠道网关系统为核心.
收藏 0 赞 0 分享

网易蜂巢的容器运维管理服务使用指南

网易蜂巢提供对Docker容器的警报和性能监控服务,通过图形化面板操作十分简洁,这里前提假设服务器端已经架设在容器中,那么接下来就让我们来看网易蜂巢的容器运维管理服务使用指南
收藏 0 赞 0 分享

为什么认为自助建站不适合SEO?自助建站工具搭建出来的网站对SEO的支持如何?

最近有一个做SEO优化朋友询问为什么自助建站做出来的网站排名很难做上去?自助建站工具搭建出来的网站真的适合SEO吗?本文将提供相关内容供大家了解,希望对大家有所帮助和启发
收藏 0 赞 0 分享

支持支付宝的高性价比美国VPS主机Pzea的购买及使用评测

Pzea一直是低价位VPS的人气之选,在美国三个大城市分别建有机房,且构建于KVM虚拟机之上,性能较为出众,接下来就为大家来分享一下这个支持支付宝的高性价比美国VPS主机Pzea的购买及使用评测
收藏 0 赞 0 分享

网站页面一定需要HTML静态化吗 实战说明静态化的必要性

很多刚开始运营网站的伙伴们都要知道网站内的页面需要进行URL优化吗?如设置静态化等,对此,本文就为大家解析一下网站静态化的必要性,有兴趣的朋友们可以了解下哦
收藏 0 赞 0 分享

移动端界面设计之尺寸基础知识学习

这篇文章主要为大家详细介绍了移动端界面设计之尺寸基础知识,通俗易懂的学习教程帮助大家了解关于移动端设计尺寸的相关知识,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

如何提高用户体验?优秀的用户体验需要遵守的十大准则

自己的网站做的很漂亮却依然没有排名,这是为什么呢?这个时候,你应该考虑你是否关注到用户体验?而如何提高用户体验又是你要考虑的问题了,本文将提供优秀的用户体验需要遵守的十大准则供大家了解,希望对大家有所帮助和启发
收藏 0 赞 0 分享

DoubleClick Ad Exchange Seller(adx) 为您的广告代码生成异步代码的方法

这篇文章主要介绍了DoubleClick Ad Exchange Seller(adx) 为您的广告代码生成异步代码的方法,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多