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 相关文章推荐
Jquery 扩展方法
May 06 Javascript
克隆javascript对象的三个方法小结
Jan 12 Javascript
javascript用户注册提示效果的简单实例
Aug 17 Javascript
javascript结合CSS实现苹果开关按钮特效
Apr 07 Javascript
vue之nextTick全面解析
May 17 Javascript
vue的一个分页组件的示例代码
Dec 25 Javascript
让网站自动生成章节目录索引的多个js代码
Jan 07 Javascript
基于Node.js实现压缩和解压缩的方法
Feb 13 Javascript
vue--点击当前增加class,其他删除class的方法
Sep 15 Javascript
react项目如何使用iconfont的方法步骤
Mar 13 Javascript
Vue的属性、方法、生命周期实例代码详解
Sep 17 Javascript
JS原型对象操作实例分析
Jun 06 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实现ip白名单黑名单功能
2015/03/12 PHP
PHP实现合并discuz用户
2015/08/05 PHP
搜索附近的人PHP实现代码
2018/02/11 PHP
javascript题目,重写函数让其无限相加
2012/02/15 Javascript
window.location.href = window.location.href 跳转无反应 a超链接onclick事件写法
2013/08/21 Javascript
页面加载完成后再执行JS的jquery写法以及区别说明
2014/02/22 Javascript
动态加载iframe时get请求传递中文参数乱码解决方法
2014/05/07 Javascript
JQuery中使用Ajax赋值给全局变量失败异常的解决方法
2014/08/18 Javascript
JQuery实现当鼠标停留在某区域3秒后自动执行
2014/09/09 Javascript
使用js Math.random()函数生成n到m间的随机数字
2014/10/09 Javascript
jquery中animate的stop()方法作用实例分析
2015/01/30 Javascript
jQuery左侧大图右侧小图焦点图幻灯切换代码分享
2015/08/19 Javascript
jQuery实现进度条效果代码
2015/12/17 Javascript
详解nodejs 文本操作模块-fs模块(五)
2016/12/23 NodeJs
JS脚本实现网页自动秒杀点击
2018/01/11 Javascript
mpvue实现微信小程序快递单号查询代码
2020/04/03 Javascript
python实现360的字符显示界面
2014/02/21 Python
python中print的不换行即时输出的快速解决方法
2016/07/20 Python
Python脚本实时处理log文件的方法
2016/11/21 Python
fastcgi文件读取漏洞之python扫描脚本
2017/04/23 Python
python的pdb调试命令的命令整理及实例
2017/07/12 Python
python中比较两个列表的实例方法
2019/07/04 Python
python用for循环求和的方法总结
2019/07/08 Python
linux中如何使用python3获取ip地址
2019/07/15 Python
python Kmeans算法原理深入解析
2019/08/23 Python
Django使用消息提示简单的弹出个对话框实例
2019/11/15 Python
Python3 把一个列表按指定数目分成多个列表的方式
2019/12/25 Python
Python实现多线程下载脚本的示例代码
2020/04/03 Python
AHAVA美国官方网站:死海海泥护肤品牌
2016/10/18 全球购物
美国在线纱线商店:Darn Good Yarn
2019/03/20 全球购物
会计助理的岗位职责
2013/11/29 职场文书
二年级数学教学反思
2014/01/21 职场文书
毕业生求职信的经典写法
2014/01/31 职场文书
创建无烟单位实施方案
2014/03/29 职场文书
百日安全活动总结
2014/05/04 职场文书
JS一分钟在github+Jekyll的博客中添加访问量功能的实现
2021/04/03 Javascript