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 封装Ajax传递的数据代码
Jun 05 Javascript
15条JavaScript最佳实践小结
Aug 09 Javascript
node.js学习总结之调式代码的方法
Jun 25 Javascript
Jquery 实现图片轮换
Jan 28 Javascript
jquery自动补齐功能插件flexselect用法示例
Aug 06 Javascript
Vuejs 用$emit与$on来进行兄弟组件之间的数据传输通信
Feb 23 Javascript
整理一些最近经常遇到的前端面试题
Apr 25 Javascript
JavaScript实现打地鼠小游戏
Apr 23 Javascript
vue.js实现刷新当前页面的方法教程
Jul 05 Javascript
解决vue打包之后静态资源图片失效的问题
Feb 21 Javascript
Vue 微信端扫描二维码苹果端却只能保存图片问题(解决方法)
Jan 19 Javascript
如何正确解决VuePress本地访问出现资源报错404的问题
Dec 03 Vue.js
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 Warning: PHP Startup: Unable to load dynamic library \ D:/php5/ext/php_mysqli.dll\
2012/06/17 PHP
解决File size limit exceeded 错误的方法
2013/06/14 PHP
PHP常用的缓存技术汇总
2014/05/05 PHP
PHP小教程之实现链表
2014/06/09 PHP
prototype Element学习笔记(篇二)
2008/10/26 Javascript
JavaScript中Object和Function的关系小结
2009/09/26 Javascript
《JavaScript高级程序设计》阅读笔记(三) ECMAScript中的引用类型
2012/02/27 Javascript
Ext JS 4官方文档之三 -- 类体系概述与实践
2012/12/16 Javascript
解析JavaScript中点号“.”的多义性
2013/12/02 Javascript
18个非常棒的jQuery代码片段
2015/11/02 Javascript
jQuery验证插件validate使用详解
2016/05/11 Javascript
JS实现仿百度文库评分功能
2017/01/12 Javascript
JavaScript定义函数的三种实现方法
2017/09/23 Javascript
微信小程序自定义组件之可清除的input组件
2018/07/17 Javascript
Vue使用虚拟dom进行渲染view的方法
2019/12/26 Javascript
js实现select下拉框选择
2020/01/11 Javascript
使用Taro实现小程序商城的购物车功能模块的实例代码
2020/06/05 Javascript
[56:35]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第一局
2016/03/06 DOTA
使用 Visual Studio Code(VSCode)搭建简单的Python+Django开发环境的方法步骤
2018/12/17 Python
解决Djang2.0.1中的reverse导入失败的问题
2019/08/16 Python
python web框架 django wsgi原理解析
2019/08/20 Python
postman传递当前时间戳实例详解
2019/09/14 Python
Python进程的通信Queue、Pipe实例分析
2020/03/30 Python
Python3爬虫mitmproxy的安装步骤
2020/07/29 Python
CSS去掉A标签(链接)虚线框的方法
2014/04/01 HTML / CSS
Sport-Thieme荷兰:购买体育用品
2019/08/25 全球购物
澳洲的UGG雪地靴超级市场:Uggs.com.au
2020/04/06 全球购物
如何打开WebSphere远程debug
2014/10/10 面试题
Java如何读取CLOB字段
2013/10/10 面试题
学校领导班子对照检查材料
2014/08/28 职场文书
教育系统干部作风整顿心得体会
2014/09/09 职场文书
幼儿园亲子活动通知
2015/04/24 职场文书
《为人民服务》教学反思
2016/02/20 职场文书
2016年幼儿园教师师德承诺书
2016/03/25 职场文书
vue.js Router中嵌套路由的实用示例
2021/06/27 Vue.js
Python采集爬取京东商品信息和评论并存入MySQL
2022/04/12 Python