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 相关文章推荐
Ext 今日学习总结
Sep 19 Javascript
jQuery EasyUI API 中文文档 - Spinner微调器使用
Oct 21 Javascript
js控制CSS样式属性语法对照表
Dec 11 Javascript
JS实现控制表格行内容垂直对齐的方法
Mar 30 Javascript
jquery实现标题字体变换的滑动门菜单效果
Sep 07 Javascript
jQuery焦点图轮播插件KinSlideshow用法分析
Jun 08 Javascript
json的使用小结
Jun 08 Javascript
JavaScript ES5标准中新增的Array方法
Jun 28 Javascript
javascript实现电脑和手机版样式切换
Nov 10 Javascript
解决淘宝cnpm 安装后cnpm不是内部或外部命令的问题
May 17 Javascript
layer.open回调获取弹出层参数的实现方法
Sep 10 Javascript
layui复选框限制选择个数的方法
Sep 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
PHP5+UTF8多文件上传类
2008/10/17 PHP
PHP数组实例详解
2016/06/26 PHP
PHP array_shift()用法实例分析
2019/01/07 PHP
IE与FireFox的兼容性问题分析
2007/04/22 Javascript
关于js中window.location.href,location.href,parent.location.href,top.location.href的用法与区别
2010/10/18 Javascript
基于jquery的分页控件(C#)
2011/01/06 Javascript
capacityFixed 基于jquery的类似于新浪微博新消息提示的定位框
2011/05/24 Javascript
浅谈checkbox的一些操作(实战经验)
2013/11/20 Javascript
javascript日期对象格式化为字符串的实现方法
2014/01/14 Javascript
Javascript的严格模式strict mode详细介绍
2014/06/06 Javascript
jquery库文件略庞大用纯js替换jquery的方法
2014/08/12 Javascript
使用Sticker.js实现贴纸效果
2015/01/28 Javascript
jquery中的工具使用方法$.isFunction, $.isArray(), $.isWindow()
2015/08/09 Javascript
jQuery+Ajax实现无刷新分页
2015/10/30 Javascript
JavaScript函数参数的传递方式详解
2017/03/06 Javascript
Vue 中批量下载文件并打包的示例代码
2017/11/20 Javascript
Vue页面跳转动画效果的实现方法
2018/09/23 Javascript
vue路由对不同界面进行传参及跳转的总结
2019/04/20 Javascript
小程序rich-text组件如何改变内部img图片样式的方法
2019/05/22 Javascript
实用Javascript调试技巧分享(小结)
2019/06/18 Javascript
Nuxt 嵌套路由nuxt-child组件用法(父子页面组件的传值)
2020/11/05 Javascript
ES5和ES6中类的区别总结
2020/12/21 Javascript
[02:23]2018DOTA2亚洲邀请赛趣味视频——反应测试
2018/04/04 DOTA
Scrapy爬虫实例讲解_校花网
2017/10/23 Python
基于Python os模块常用命令介绍
2017/11/03 Python
pycharm debug功能实现跳到循环末尾的方法
2018/11/29 Python
浅谈Python大神都是这样处理XML文件的
2019/05/31 Python
Django rest framework jwt的使用方法详解
2019/08/08 Python
在Django中预防CSRF攻击的操作
2020/03/13 Python
tensorflow之读取jpg图像长和宽实例
2020/06/18 Python
Python 实现图片转字符画的示例(静态图片,gif皆可)
2020/11/05 Python
html5的canvas方法使用指南
2014/12/15 HTML / CSS
艺术用品:Arteza
2018/11/25 全球购物
自动化专业本科毕业生求职信
2013/10/20 职场文书
大学生党员暑假实践(活动总结)
2019/08/21 职场文书
python区块链持久化和命令行接口实现简版
2022/05/25 Python