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 相关文章推荐
Prototype使用指南之hash.js
Jan 10 Javascript
JavaScript 学习笔记(十三)Dom创建表格
Jan 21 Javascript
json格式化/压缩工具 Chrome插件扩展版
May 25 Javascript
IE6下通过a标签点击切换图片的问题
Nov 14 Javascript
纯JAVASCRIPT图表动画插件Highcharts Examples
Apr 16 Javascript
用js实现判断当前网址的来路如果不是指定的来路就跳转到指定页面
May 02 Javascript
详解jQuery中基本的动画方法
Dec 14 Javascript
webpack 2的react开发配置实例代码
Jul 28 Javascript
基于vue cli重构多页面脚手架过程详解
Jan 23 Javascript
关于vue中watch检测到不到对象属性的变化的解决方法
Feb 08 Javascript
Vue 实现从文件中获取文本信息的方法详解
Oct 16 Javascript
jquery自定义组件实例详解
Dec 31 jQuery
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使用json_encode对变量json编码
2014/04/07 PHP
php查看当前Session的ID实例
2015/03/16 PHP
使用JavaScript switch case 另类写法
2010/03/14 Javascript
TinyMCE 新增本地图片上传功能
2010/11/05 Javascript
很好用的js日历算法详细代码
2013/03/07 Javascript
文字不间断滚动(上下左右)实例代码
2013/04/21 Javascript
JavaScript bold方法入门实例(把指定文字显示为粗体)
2014/10/17 Javascript
JS判断是否360安全浏览器极速内核的方法
2015/01/29 Javascript
仅9张思维导图帮你轻松学习Javascript 就这么简单
2016/06/01 Javascript
AngularJS入门教程之路由与多视图详解
2016/08/19 Javascript
如何学JavaScript?前辈的经验之谈
2016/12/28 Javascript
js replace()去除代码中空格的实例
2017/02/14 Javascript
Angularjs使用指令做表单校验的方法
2017/03/31 Javascript
layer弹窗插件操作方法详解
2017/05/19 Javascript
vue中页面跳转拦截器的实现方法
2017/08/23 Javascript
css和js实现弹出登录居中界面完整代码
2017/11/26 Javascript
Vue 组件(component)教程之实现精美的日历方法示例
2018/01/08 Javascript
bootstrap 弹出框modal添加垂直方向滚轴效果
2018/07/09 Javascript
浅谈在Vue.js中如何实现时间转换指令
2019/01/06 Javascript
vue和better-scroll实现列表左右联动效果详解
2019/04/29 Javascript
小程序click-scroll组件设计
2019/06/18 Javascript
微信小程序开发之map地图组件定位并手动修改位置偏差
2019/08/17 Javascript
python3实现公众号每日定时发送日报和图片
2018/02/24 Python
用pycharm开发django项目示例代码
2018/10/24 Python
Python Cookie 读取和保存方法
2018/12/28 Python
WIn10+Anaconda环境下安装PyTorch(避坑指南)
2019/01/30 Python
python3使用QQ邮箱发送邮件
2020/05/20 Python
python for循环remove同一个list过程解析
2019/08/14 Python
pymysql模块的使用(增删改查)详解
2019/09/09 Python
Keras自动下载的数据集/模型存放位置介绍
2020/06/19 Python
Linux系统下升级pip的完整步骤
2021/01/31 Python
联想美国官方商城:Lenovo美国
2017/06/19 全球购物
高中生职业生涯规划书
2014/02/24 职场文书
优秀班主任推荐材料
2014/12/17 职场文书
人事主管岗位职责
2015/02/04 职场文书
攻击最高的10只幽灵系神奇宝贝,坚盾剑怪排第一,第五最为可怕
2022/03/18 日漫