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 相关文章推荐
js之WEB开发调试利器:Firebug 下载
Jan 13 Javascript
javascript 实现父窗口引用弹出窗口的值的脚本
Aug 07 Javascript
技术男用来对妹子表白的百度首页
Jul 23 Javascript
使用js复制链接中的部分文字的方法
Jul 30 Javascript
下雪了 javascript实现雪花飞舞
Aug 02 Javascript
jQuery实现下拉框多选 jquery-multiselect 的实例代码
Jul 14 Javascript
几种二级联动案例(jQuery\Array\Ajax php)
Aug 13 Javascript
vue仿淘宝订单状态的tab切换效果
Jun 23 Javascript
vue-cli脚手架引入弹出层layer插件的几种方法
Jun 24 Javascript
Nuxt.js实战和配置详解
Aug 05 Javascript
layui-table表复选框勾选的所有行数据获取的例子
Sep 13 Javascript
简单了解three.js 着色器材质
Aug 03 Javascript
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
php面向对象全攻略 (二) 实例化对象 使用对象成员
2009/09/30 PHP
探讨php define()函数及defined()函数使用详解
2013/06/09 PHP
浅谈php和.net的区别
2014/09/28 PHP
php实现将base64格式图片保存在指定目录的方法
2016/10/13 PHP
JavaScript 事件的一些重要说明
2009/10/25 Javascript
js获取IP地址的方法小结
2014/07/01 Javascript
用javascript读取xml文件读取节点数据
2014/08/12 Javascript
JS实现从顶部下拉显示的带动画QQ客服特效代码
2015/10/24 Javascript
使用JavaScript实现弹出层效果的简单实例
2016/05/31 Javascript
JavaScript中捕获与冒泡详解及实例
2017/02/03 Javascript
Bootstrap 过渡效果Transition 模态框(Modal)
2017/03/17 Javascript
javascript实现非常简单的小数取整功能示例
2017/06/13 Javascript
javascript将list转换成树状结构的实例
2017/09/08 Javascript
Bootstrap一款超好用的前端框架
2017/09/25 Javascript
vue实现验证码输入框组件
2017/12/14 Javascript
用Object.prototype.toString.call(obj)检测对象类型原因分析
2018/10/11 Javascript
探索JavaScript中私有成员的相关知识
2019/06/13 Javascript
vue离开当前页面触发的函数代码
2020/09/01 Javascript
浅谈JavaScript 声明提升
2020/09/14 Javascript
vue 根据选择的月份动态展示日期对应的星期几
2021/02/06 Vue.js
python计数排序和基数排序算法实例
2014/04/25 Python
Python简单操作sqlite3的方法示例
2017/03/22 Python
Python 实现选择排序的算法步骤
2018/04/22 Python
关于Flask项目无法使用公网IP访问的解决方式
2019/11/19 Python
python 串行执行和并行执行实例
2020/04/30 Python
中国包裹转运寄送国际服务:Famiboat
2019/07/24 全球购物
Roxy俄罗斯官方网站:冲浪和滑雪板的一切
2020/06/20 全球购物
工商管理实习自我鉴定
2013/09/28 职场文书
开业庆典答谢词
2014/01/18 职场文书
超市中秋节活动方案
2014/02/12 职场文书
药剂专业毕业生求职信
2014/06/24 职场文书
普通党员对照检查材料
2014/08/28 职场文书
企业贷款委托书格式
2014/09/12 职场文书
2014年助理工程师工作总结
2014/11/14 职场文书
Pytorch 使用tensor特定条件判断索引
2021/04/08 Python
CSS3 制作的图片滚动效果
2021/04/14 HTML / CSS