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 相关文章推荐
javascript 设为首页与加入收藏兼容多浏览器代码
Jan 11 Javascript
JS幻灯片可循环播放可平滑旋转带滚动导航(自写)
Aug 05 Javascript
在Ubuntu上安装最新版本的Node.js
Jul 14 Javascript
Underscore.js常用方法总结
Feb 28 Javascript
JavaScript中setFullYear()方法的使用详解
Jun 11 Javascript
JS实现霓虹灯文字效果的方法
Aug 06 Javascript
JavaScript严格模式详解
Nov 18 Javascript
jQuery解决浏览器兼容性问题案例分析
Apr 15 Javascript
vue微信分享出来的链接点开是首页问题的解决方法
Nov 28 Javascript
iphone刘海屏页面适配方法
May 07 Javascript
JS获取动态添加元素的方法详解
Jul 31 Javascript
基于VUE的v-charts的曲线显示功能
Oct 01 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
mysql数据库差异比较的PHP代码
2012/02/05 PHP
smarty内置函数{loteral}、{ldelim}和{rdelim}用法实例
2015/01/22 PHP
PHP连接MySQL数据库操作代码实例解析
2020/07/11 PHP
JavaScript 异步调用框架 (Part 5 - 链式实现)
2009/08/04 Javascript
jquery 屏蔽一个区域内的所有元素,禁止输入
2009/10/22 Javascript
node.js中的fs.writeFile方法使用说明
2014/12/14 Javascript
JavaScript对象学习小结
2015/09/02 Javascript
jquery网页加载进度条的实现
2017/06/01 jQuery
微信小程序模版渲染详解
2018/01/26 Javascript
通过JQuery,JQueryUI和Jsplumb实现拖拽模块
2019/06/18 jQuery
js脚本中执行java后台代码方法解析
2019/10/11 Javascript
react中hook介绍以及使用教程
2020/12/11 Javascript
[00:57]林俊杰助阵DOTA2亚洲邀请赛
2015/01/28 DOTA
python将MongoDB里的ObjectId转换为时间戳的方法
2015/03/13 Python
深入理解Python中字典的键的使用
2015/08/19 Python
Windows下Python使用Pandas模块操作Excel文件的教程
2016/05/31 Python
Python中的单继承与多继承实例分析
2018/05/10 Python
python实现自动登录后台管理系统
2018/10/18 Python
python利用openpyxl拆分多个工作表的工作簿的方法
2019/09/27 Python
pytorch中的上采样以及各种反操作,求逆操作详解
2020/01/03 Python
python实现在一个画布上画多个子图
2020/01/19 Python
CSS3,线性渐变(linear-gradient)的使用总结
2017/01/09 HTML / CSS
使用Html5 Stream开发实时监控系统
2020/06/02 HTML / CSS
夜大自我鉴定
2013/10/31 职场文书
2014年社区学雷锋活动总结
2014/03/09 职场文书
《山谷中的谜底》教学反思
2014/04/26 职场文书
感恩教育活动总结
2014/05/05 职场文书
暑期政治学习心得体会
2014/09/02 职场文书
2014国庆节商场促销活动策划方案
2014/09/16 职场文书
房地产销售主管岗位职责
2015/02/13 职场文书
十七岁的单车观后感
2015/06/12 职场文书
高中美术教学反思
2016/02/17 职场文书
爱岗敬业事迹材料
2019/06/20 职场文书
python第三方网页解析器 lxml 扩展库与 xpath 的使用方法
2021/04/06 Python
JavaScript事件的委托(代理)的用法示例详解
2022/02/18 Javascript
Spring Security使用单点登录的权限功能
2022/04/03 Java/Android