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 相关文章推荐
实现png图片和png背景透明(支持多浏览器)的方法
Sep 08 Javascript
Extjs中ComboBoxTree实现的下拉框树效果(自写)
May 28 Javascript
开发 Internet Explorer 右键功能表(ContextMenu)
Jul 03 Javascript
返回页面顶部top按钮通过锚点实现(自写)
Aug 30 Javascript
jQuery中wrapAll()方法用法实例
Jan 16 Javascript
jQuery控制Div拖拽效果完整实例分析
Apr 15 Javascript
js钢琴按钮波浪式图片排列效果代码分享
Aug 26 Javascript
jquery+json实现数据二级联动的方法
Nov 28 Javascript
js中动态创建json,动态为json添加属性、属性值的实例
Dec 02 Javascript
JavaScript适配器模式详解
Oct 19 Javascript
JS动态插入脚本和插入引用外部链接脚本的方法
May 21 Javascript
Bootstrap 模态框自定义点击和关闭事件详解
Aug 10 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
第三节 定义一个类 [3]
2006/10/09 PHP
本地机apache配置基于域名的虚拟主机详解
2013/08/10 PHP
php+MySQL判断update语句是否执行成功的方法
2014/08/28 PHP
PHP清除数组中所有字符串两端空格的方法
2014/10/20 PHP
php基于GD库画五星红旗的方法
2015/02/24 PHP
php实现上传图片文件代码
2015/07/19 PHP
jQuery生成asp.net服务器控件的代码
2010/02/04 Javascript
javascript算法题 求任意一个1-9位不重复的N位数在该组合中的大小排列序号
2012/07/21 Javascript
js arguments对象应用介绍
2012/11/28 Javascript
javascript显示用户停留时间的简单实例
2013/08/05 Javascript
Jquery下EasyUI组件中的DataGrid结果集清空方法
2014/01/06 Javascript
js 立即调用的函数表达式如何写
2014/01/12 Javascript
防止jQuery ajax Load使用缓存的方法小结
2014/02/22 Javascript
使用nodejs、Python写的一个简易HTTP静态文件服务器
2014/07/18 NodeJs
js控制div层的叠加简单方法
2016/10/15 Javascript
Dropzone.js实现文件拖拽上传功能(附源码下载)
2016/11/22 Javascript
基于JS对象创建常用方式及原理分析
2017/06/28 Javascript
小程序实现多选框功能
2018/10/30 Javascript
js console.log打印对象时属性缺失的解决方法
2019/05/23 Javascript
Vue实现指令式动态追加小球动画组件的步骤
2020/12/18 Vue.js
[10:04]国际邀请赛采访专栏:DK.Farseer,mouz.Black^,采访员Josh专访
2013/08/05 DOTA
使用Python3制作TCP端口扫描器
2017/04/17 Python
利用Python读取文件的四种不同方法比对
2017/05/18 Python
利用python获取Ping结果示例代码
2017/07/06 Python
python+pyqt实现右下角弹出框
2017/10/26 Python
python解释器spython使用及原理解析
2019/08/24 Python
通过Python实现Payload分离免杀过程详解
2020/07/13 Python
关于青春的演讲稿
2014/05/05 职场文书
自查自纠工作情况报告
2014/10/29 职场文书
医院财务人员岗位职责
2015/04/14 职场文书
2015年国培研修感言
2015/08/01 职场文书
微信小程序和php的登录实现
2021/04/01 PHP
Vue.js中v-bind指令的用法介绍
2022/03/13 Vue.js
USB TYPE-C 或将成为所有智能手机充电标准
2022/04/21 数码科技
python神经网络 tf.name_scope 和 tf.variable_scope 的区别
2022/05/04 Python
利用Java连接Hadoop进行编程
2022/06/28 Java/Android