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实现上传图片前的预览(TX的面试题)
Aug 20 Javascript
IE浏览器兼容Firefox的JS脚本的代码
Oct 23 Javascript
javascript iframe中打开文件,并检测iframe存在否
Dec 28 Javascript
支持ie与FireFox的剪切板操作代码
Sep 28 Javascript
JavaScript中数组成员的添加、删除介绍
Dec 30 Javascript
在AngularJS中使用AJAX的方法
Jun 17 Javascript
js返回顶部实例分享
Dec 21 Javascript
jquery实现弹窗功能(窗口居中显示)
Feb 27 Javascript
react 组件传值的三种方法
Jun 03 Javascript
简单了解Vue + ElementUI后台管理模板
Apr 07 Javascript
vue data变量相互赋值后被实时同步的解决步骤
Aug 05 Javascript
如何用threejs实现实时多边形折射
May 07 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 下载文件时自动添加bom头的方法实例
2014/01/10 PHP
php返回相对时间(如:20分钟前,3天前)的方法
2015/04/14 PHP
Laravel事件监听器用法实例分析
2019/03/12 PHP
javascript之typeof、instanceof操作符使用探讨
2013/05/19 Javascript
jQuery 1.9.1源码分析系列(十四)之常用jQuery工具
2015/12/02 Javascript
js中判断变量类型函数typeof的用法总结
2016/08/09 Javascript
微信小程序 选项卡的简单实例
2017/05/24 Javascript
NodeJS使用七牛云存储上传文件的方法
2017/07/24 NodeJs
jQuery获取复选框选中的当前行的某个字段的值
2017/09/15 jQuery
认识jQuery的Promise的具体使用方法
2017/10/10 jQuery
基于Vue实现拖拽功能
2020/07/29 Javascript
小程序自定义组件实现城市选择功能
2018/07/18 Javascript
微信小程序实现购物页面左右联动
2019/02/15 Javascript
基于node简单实现RSA加解密的方法步骤
2019/03/21 Javascript
ES6知识点整理之函数对象参数默认值及其解构应用示例
2019/04/17 Javascript
Vue 子组件与数据传递问题及注意事项
2019/07/11 Javascript
解决微信小程序scroll-view组件无横向滚动的问题
2020/02/04 Javascript
vue用elementui写form表单时,在label里添加空格操作
2020/08/13 Javascript
Vue proxyTable配置多个接口地址,解决跨域的问题
2020/09/11 Javascript
简单的编程0基础下Python入门指引
2015/04/01 Python
Python OpenCV处理图像之滤镜和图像运算
2018/07/10 Python
python爬取淘宝商品销量信息
2018/11/16 Python
Python根据成绩分析系统浅析
2019/02/11 Python
Django中FilePathField字段的用法
2020/05/21 Python
彻底解决Python包下载慢问题
2020/11/15 Python
python 视频下载神器(you-get)的具体使用
2021/01/06 Python
英国护肤品购物网站:Beauty Expert
2016/08/19 全球购物
历史专业毕业生的自我鉴定
2013/11/15 职场文书
环境工程专业个人求职信
2013/12/05 职场文书
保护黄河倡议书
2014/05/16 职场文书
写给孩子的新学期寄语
2015/02/27 职场文书
2016元旦文艺汇演主持词(开场白+结束语)
2015/12/03 职场文书
教你怎么用Python生成九宫格照片
2021/05/20 Python
Java中CyclicBarrier和CountDownLatch的用法与区别
2021/08/23 Java/Android
为什么RedisCluster设计成16384个槽
2021/09/25 Redis
SQL Server 忘记密码以及重新添加新账号
2022/04/26 SQL Server