HTTP 304错误的详细讲解


Posted in Javascript onNovember 13, 2013

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 的一个理解。

Javascript 相关文章推荐
拖动一个HTML元素
Dec 22 Javascript
如何制作浮动广告 JavaScript制作浮动广告代码
Dec 30 Javascript
如何在MVC应用程序中使用Jquery
Nov 17 Javascript
浅谈angularjs module返回对象的坑(推荐)
Oct 21 Javascript
JS仿QQ好友列表展开、收缩功能(第一篇)
Jul 07 Javascript
[js高手之路]图解javascript的原型(prototype)对象,原型链实例
Aug 28 Javascript
捕获未处理的Promise错误方法
Oct 13 Javascript
JavaScript内存泄漏的处理方式
Nov 20 Javascript
jquery 遍历hash操作示例【基于ajax交互】
Oct 12 jQuery
Vue+webpack实现懒加载过程解析
Feb 17 Javascript
jQuery 淡入/淡出效果函数用法分析
May 19 jQuery
jquery插件实现悬浮的菜单
Apr 24 jQuery
js动态修改input输入框的type属性(实现方法解析)
Nov 13 #Javascript
js字母大小写转换实现方法总结
Nov 13 #Javascript
jQuery替换字符串(实例代码)
Nov 13 #Javascript
js 将json字符串转换为json对象的方法解析
Nov 13 #Javascript
JS 实现BASE64_ENCODE和BASE64_DECODE(实例代码)
Nov 13 #Javascript
JavaScript实现url地址自动检测并添加URL链接示例代码
Nov 12 #Javascript
JavaScript改变HTML元素的样式改变CSS及元素属性
Nov 12 #Javascript
You might like
mysql 全文搜索 技巧
2007/04/27 PHP
zf框架的校验器InArray使用示例
2014/03/13 PHP
php+ajax导入大数据时产生的问题处理
2014/06/11 PHP
php curl 上传文件代码实例
2015/04/27 PHP
非常全面的php日期时间运算汇总
2015/11/04 PHP
基于Swoole实现PHP与websocket聊天室
2016/08/03 PHP
PHP使用Http Post请求发送Json对象数据代码解析
2020/07/16 PHP
取得父标签
2006/11/14 Javascript
javascript倒计时功能实现代码
2012/06/07 Javascript
js实例属性和原型属性示例详解
2014/11/23 Javascript
如何改进javascript代码的性能
2015/04/02 Javascript
javascript显示倒计时控制按钮的简单实现
2016/06/07 Javascript
JS传递对象数组为参数给后端,后端获取的实例代码
2016/06/28 Javascript
js实现移动端轮播图效果
2020/12/09 Javascript
JS实现百度搜索接口及链接功能实例代码
2018/02/02 Javascript
Node.js npm命令运行node.js脚本的方法
2018/10/10 Javascript
解决layui富文本编辑器图片上传无法回显的问题
2019/09/18 Javascript
解决三元运算符 报错“SyntaxError: can''t assign to conditional expression”
2020/02/12 Javascript
JS前后端实现身份证号验证代码解析
2020/07/23 Javascript
Openlayers显示瓦片网格信息的方法
2020/09/28 Javascript
微信小程序实现点击导航条切换页面
2020/11/19 Javascript
nodejs+express最简易的连接数据库的方法
2020/12/23 NodeJs
Python 专题五 列表基础知识(二维list排序、获取下标和处理txt文本实例)
2017/03/20 Python
基于python(urlparse)模板的使用方法总结
2017/10/13 Python
Python获取本机所有网卡ip,掩码和广播地址实例代码
2018/01/22 Python
python学习入门细节知识点
2018/03/29 Python
解决pytorch多GPU训练保存的模型,在单GPU环境下加载出错问题
2020/06/23 Python
大学军训感言300字
2014/03/09 职场文书
学习雷锋活动总结
2014/04/29 职场文书
教师批评与自我批评材料
2014/10/16 职场文书
机关作风建设整改方案
2014/10/27 职场文书
入党积极分子考察意见
2015/06/02 职场文书
2015年暑假工作总结
2015/07/13 职场文书
工程移交协议书
2016/03/24 职场文书
Java spring单点登录系统
2021/09/04 Java/Android
Python 数据可视化之Matplotlib详解
2021/11/02 Python