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父、子页面交互技巧总结
Aug 08 Javascript
JavaScript简单表格编辑功能实现方法
Apr 16 Javascript
使用Node.js为其他程序编写扩展的基本方法
Jun 23 Javascript
JavaScript中Boolean对象的属性解析
Oct 21 Javascript
jQuery form 表单验证插件(fieldValue)校验表单
Jan 24 Javascript
Vue.js 递归组件实现树形菜单(实例分享)
Dec 21 Javascript
Node.js中用D3.js的方法示例
Jan 16 Javascript
vue弹窗组件使用方法
Apr 28 Javascript
webpack + vue 打包生成公共配置文件(域名) 方便动态修改
Aug 29 Javascript
原生js实现贪食蛇小游戏的思路详解
Nov 26 Javascript
Vue如何实现变量表达式选择器
Feb 18 Vue.js
详解JSON.parse和JSON.stringify用法
Feb 18 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
windows下PHP APACHE MYSQ完整配置
2007/01/02 PHP
php获取文件内容最后一行示例
2014/01/09 PHP
ucenter中词语过滤原理分析
2016/07/13 PHP
详解cookie验证的php应用的一种SSO解决办法
2017/10/20 PHP
Thinkphp5行为使用方法汇总
2017/12/21 PHP
Laravel 实现关系模型取出需要的字段
2019/10/10 PHP
css图片自适应大小
2007/11/28 Javascript
五段实用的js高级技巧
2011/12/20 Javascript
JSON 数据格式介绍
2012/01/13 Javascript
javascript学习总结之js使用技巧
2015/09/02 Javascript
Bootstrap学习系列之使用 Bootstrap Typeahead 组件实现百度下拉效果
2016/07/07 Javascript
Javascript 判断两个IP是否在同一网段实例代码
2016/11/28 Javascript
React利用插件和不用插件实现双向绑定的方法详解
2017/07/03 Javascript
Angular简单验证功能示例
2017/12/22 Javascript
vue-for循环嵌套操作示例
2019/01/28 Javascript
TypeScript 运行时类型检查补充工具
2020/09/28 Javascript
[00:36]DOTA2上海特级锦标赛 LGD战队宣传片
2016/03/04 DOTA
[45:18]完美世界DOTA2联赛循环赛 PXG vs IO 第二场 11.06
2020/11/09 DOTA
举例讲解Python编程中对线程锁的使用
2016/07/12 Python
python实现基于SVM手写数字识别功能
2020/05/27 Python
浅谈python可视化包Bokeh
2018/02/07 Python
Python多进程与服务器并发原理及用法实例分析
2018/08/21 Python
python读写csv文件方法详细总结
2019/07/05 Python
python 的topk算法实例
2020/04/02 Python
python 使用递归的方式实现语义图片分割功能
2020/07/16 Python
python字典key不能是可以是啥类型
2020/08/04 Python
Django nginx配置实现过程详解
2020/09/10 Python
Expedia爱尔兰:酒店、机票、租车及廉价假期
2017/01/02 全球购物
全球虚拟主机商:HostGator
2017/02/06 全球购物
品酒会策划方案
2014/05/26 职场文书
公司行政专员岗位职责
2014/08/24 职场文书
2014年四风问题个人对照自查剖析材料
2014/09/15 职场文书
2014年局领导班子自身建设情况汇报
2014/11/21 职场文书
工程技术员岗位职责
2015/04/11 职场文书
国产动画《万圣街》日语配音版制作决定!
2022/03/20 国漫
Java 超详细讲解十大排序算法面试无忧
2022/04/08 Java/Android