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 相关文章推荐
根据邮箱的域名跳转到相应的登录页面的代码
Feb 27 Javascript
jQuery异步验证用户名是否存在示例代码
May 21 Javascript
JQuery.Ajax()的data参数类型实例详解
Nov 20 Javascript
JS中取二维数组中最大值的方法汇总
Apr 17 Javascript
JS+Canvas绘制时钟效果
Aug 20 Javascript
只需五句话搞定JavaScript作用域(经典)
Jul 26 Javascript
js编写选项卡效果
May 23 Javascript
vue+swiper实现侧滑菜单效果
Dec 28 Javascript
JS加密插件CryptoJS实现的DES加密示例
Aug 16 Javascript
使用wxapp-img-loader自定义组件实现微信小程序图片预加载功能
Oct 18 Javascript
vue实现行列转换的一种方法
Aug 06 Javascript
ES6 Object.assign()的用法及其使用
Jan 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
咖啡语言
2021/03/03 咖啡文化
php empty()与isset()区别的详细介绍
2013/06/17 PHP
Laravel 5框架学习之数据库迁移(Migrations)
2015/04/08 PHP
学习php设计模式 php实现抽象工厂模式
2015/12/07 PHP
JavaScript 应用类库代码
2008/06/02 Javascript
js原型继承的两种方法对比介绍
2014/03/30 Javascript
JavaScript格式化日期时间的方法和自定义格式化函数示例
2014/04/04 Javascript
AngularJS入门教程之学习环境搭建
2014/12/06 Javascript
jquery实现鼠标滑过小图查看大图的方法
2015/07/20 Javascript
AngularJS入门教程之多视图切换用法示例
2016/11/02 Javascript
js简单正则验证汉字英文及下划线的方法
2016/11/28 Javascript
Bootstrap面板(Panels)的简单实现代码
2017/03/17 Javascript
React-Native中props具体使用详解
2017/09/04 Javascript
element-ui上传一张图片后隐藏上传按钮功能
2019/05/22 Javascript
js判断鼠标移入移出方向的方法
2020/06/24 Javascript
在vue中使用vant TreeSelect分类选择组件操作
2020/11/02 Javascript
[01:14]3.19DOTA2发布会 三代刀塔人第二代
2014/03/25 DOTA
python 字符串split的用法分享
2013/03/23 Python
用Python进行基础的函数式编程的教程
2015/03/31 Python
Python字符和字符值(ASCII或Unicode码值)转换方法
2015/05/21 Python
Python中条件判断语句的简单使用方法
2015/08/21 Python
python开发中range()函数用法实例分析
2015/11/12 Python
Python 实现随机数详解及实例代码
2017/04/15 Python
python pandas dataframe 按列或者按行合并的方法
2018/04/12 Python
django与小程序实现登录验证功能的示例代码
2019/02/19 Python
Python 操作 ElasticSearch的完整代码
2019/08/04 Python
python装饰器的特性原理详解
2019/12/25 Python
利用python下载scihub成文献为PDF操作
2020/07/09 Python
推荐WEB开发者最佳HTML5和CSS3代码生成器
2015/11/24 HTML / CSS
一文彻底解决HTML5页面中长按保存图片功能
2019/06/10 HTML / CSS
韩国演唱会订票网站:StubHub韩国
2019/01/17 全球购物
英语演讲稿范文
2014/01/03 职场文书
《棉鞋里的阳光》教学反思
2014/04/24 职场文书
事业单位年度考核评语
2014/12/31 职场文书
正确使用MySQL INSERT INTO语句
2021/05/26 MySQL
MySQL查询日期时间
2022/05/15 MySQL