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 相关文章推荐
html+js实现动态显示本地时间
Sep 21 Javascript
解决js下referer兼容各大浏览器的方法
Nov 03 Javascript
Ajax+FormData+javascript实现无刷新表单信息提交
Oct 24 Javascript
jQuery中的select操作详解
Nov 29 Javascript
javascript容错处理代码(屏蔽js错误)
Jan 20 Javascript
微信小程序实现滑动删除效果
May 19 Javascript
微信小程序实现顶部普通选项卡效果(非swiper)
Jun 19 Javascript
node.js 模块和其下载资源的镜像设置的方法
Sep 06 Javascript
vue构建动态表单的方法示例
Sep 22 Javascript
微信小程序实现带缩略图轮播效果
Nov 04 Javascript
在VUE中实现文件下载并判断状态的方法
Nov 08 Javascript
解决vue无法侦听数组及对象属性的变化问题
Jul 17 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图形计数器程序显示网站用户浏览量
2016/07/20 PHP
php根据地址获取百度地图经纬度的实例方法
2019/09/03 PHP
javascript基础知识大集锦(一) 推荐收藏
2011/01/13 Javascript
jQuery 1.7.2中getAll方法的疑惑分析
2012/05/23 Javascript
怎样在JavaScript里写一个swing把数据插入数据库
2012/12/10 Javascript
jQuery JSON实现无刷新三级联动实例探讨
2013/05/28 Javascript
基于JavaScript制作霓虹灯文字 代码 特效
2015/09/01 Javascript
Bootstrap编写一个兼容主流浏览器的受众巨幕式风格页面
2016/07/01 Javascript
JS树形菜单组件Bootstrap TreeView使用方法详解
2016/12/21 Javascript
浅谈webpack对样式的处理
2018/01/05 Javascript
浅谈Vue.js中如何实现自定义下拉菜单指令
2019/01/06 Javascript
vue组件化中slot的基本使用方法
2019/05/01 Javascript
vue实现一个矩形标记区域(rectangle marker)的方法
2020/10/28 Javascript
[19:24]DOTA2客户端使用指南 一分钟快速设置轻松超神
2013/09/24 DOTA
[42:50]NB vs VP 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[43:58]DOTA2-DPC中国联赛定级赛 LBZS vs SAG BO3第一场 1月8日
2021/03/11 DOTA
简单的通用表达式求10乘阶示例
2014/03/03 Python
详解Python3操作Mongodb简明易懂教程
2017/05/25 Python
Python实现基于多线程、多用户的FTP服务器与客户端功能完整实例
2017/08/18 Python
使用Django连接Mysql数据库步骤
2019/01/15 Python
华为校园招聘上机笔试题 扑克牌大小(python)
2020/04/22 Python
Pytorch 之修改Tensor部分值方式
2019/12/27 Python
手把手教你安装Windows版本的Tensorflow
2020/03/26 Python
selenium携带cookies模拟登陆CSDN的实现
2021/01/19 Python
HTML5本地存储localStorage、sessionStorage基本用法、遍历操作、异常处理等
2014/05/08 HTML / CSS
美国羽绒床上用品第一品牌:Pacific Coast
2018/08/25 全球购物
天逸系统(武汉)有限公司Java笔试题
2015/12/29 面试题
环境工程专业个人求职信
2013/12/05 职场文书
旅游管理毕业生自荐书
2014/02/02 职场文书
欢迎词范文
2015/01/27 职场文书
《三国志》赏析
2019/08/27 职场文书
Ajax实现局部刷新的方法实例
2021/03/31 Javascript
PHP 技巧 * SVG 保存为图片(分享图生成)
2021/04/02 PHP
使用Python脚本对GiteePages进行一键部署的使用说明
2021/05/27 Python
Python之基础函数案例详解
2021/08/30 Python
Mysql查询时间区间日期列表,不会由于数据表数据影响
2022/04/19 MySQL