解决在IE中获取数据的缓存问题,运行环境为node.js
来源:互联网 发布:青岛美工设计培训班 编辑:程序博客网 时间:2024/05/22 06:10
IE下默认会开启缓存策略,不管是页面还是通过ajax请求的数据都会议一个url,url是uri(统一资源定位符)的实例,url就是资源的标识符。
写一个demo进行验证,测试环境:IE8,node.js 0.12.7,页面模板为jade。
页面代码:testCache.jade
页面上放一个按钮,点下后从后台获取一个自增的数值显示在按钮上。
doctype htmlhtml head meta(charset='utf-8') title= title script(src='/js/jquery-1.10.2.min.js') script(src="/js/bootstrap.min.js") body button(id='btnTest', type='button', class='btn btn-default gap') 测试 script. $(document).ready(function(){ $('#btnTest').click(doTest); }); function doTest(){ $.ajax({ type: 'GET', url: '/cache/data', data: '', dataType: 'html'}) .done(function(data){ $('#btnTest').html(data); }) }
//获取测试页面router.get('/cache/page', function(req, res){ res.render('testCache', { title: 'testCache' });});//获取自增数值var index = 0;router.get('/cache/data', function(req, res){ var data = index++; res.write(data.toString()); res.end();});
缓存问题,根本上还是响应header的设置问题,只不过IE在发现响应头中没有缓存设置项时会采取缓存策略,和其他浏览器的处理方式不同而已。
缓存很多时候是必须的,比如:新闻页面,升级页面,静态页面,这些资源在被访问后都可以缓存在浏览器段,通过根据资源的更新策略来设置规定的过期时间,可降低同服务器的资源获取次数。
当然在不需要缓存的地方,也要坚决的避免被缓存。
在IE中避免被缓存,如果是一个页面,那么就要在meta中设置缓存。
<meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="-1"> <meta http-equiv="progma" content="no-cache">
上面的三项设置其实只要cache-control就可以了,本质上来说,在meta中的http-equiv的设置都会有服务器填入页面的响应header中。
如果是在页面上通过ajax来获取数据的,就要在后台数据的响应处,加上缓存的设置,明明白白地告诉浏览器,请你不要缓存。如下。
//获取自增数值var index = 0;router.get('/cache/data', function(req, res){ var data = index++; res.setHeader('cache-control', 'no-cache'); res.write(data.toString()); res.end();});
通过设置了no-cache后,本文的demo中的字增值就可以随着点击而增加并显示在按钮上。
在http的header中,缓存的配置项主要是5种,这里就列一下,网上的说明太多了。
1.cache-control
有4个值,private、no-cache、max-age、must-revalidate。
private:缓存到私有缓存。
max-age:相对过期时间,秒为单位,从浏览器获取资源的相应秒数后过期。
must-revalidate:每次访问都需要重新验证。
no-cache:不缓存。
2.expires
过期时间,这是一个绝对时间,时间格式是格林威治时间,如“Sun, 08 Nov2009 03:37:26 GMT”,过了这个时间,就过期
3.progma
对http1.0服务器的兼容。
4.Last-Modified/If-Modified-Since
在你的请求中发送一个 If-Modified-Since 头信息,它包含了上一次从服务器连同数据所获得的日期。如果数据从那时起没有改变,服务器将返回一个特殊的 HTTP 状态代码 304。
5.ETag/If-None-Match
服务器发送你所请求的数据的同时,发送某种数据的 hash (在 ETag 头信息中给出)。hash 的确定完全取决于服务器。当第二次请求相同的数据时,你需要在 If-None-Match: 头信息中包含 ETag hash,如果数据没有改变,服务器将返回 304 状态代码。
- 解决在IE中获取数据的缓存问题,运行环境为node.js
- jQuery 获取xml数据在IE中无效的问题
- 解决windows2008环境 IE运行JS 、JQuery、Ajax失效的问题
- 解决Ajax在IE浏览器中缓存问题
- 解决IE浏览器中解决IE浏览中AJAX只能运一次的IE缓存问题
- 解决IE浏览器中解决IE浏览中AJAX只能运一次的IE缓存问题
- 解决ie缓存的问题
- Node.js中,在cmd界面,进入退出Node.js运行环境
- 解决Postman发送post数据但是Node.js中req.body接收不到数据的问题
- ASP.NET页面在IE缓存问题的解决
- ASP.NET页面在IE缓存问题的解决
- 用Babel解决node.js运行ES6的问题
- 在ie中关于ajax请求获得数据缓存问题的解决办法
- ajax在IE浏览器中请求的数据不正确,缓存问题
- 解决ajax调用中ie的缓存问题
- jquery 请求ie缓存,数据不更新的问题【ajax禁用缓存解决ie数据不更新的问题】
- jquery 请求ie缓存,数据不更新的问题【ajax禁用缓存解决ie数据不更新的问题】
- jquery 请求ie缓存,数据不更新的问题【ajax禁用缓存解决ie数据不更新的问题】
- git学习------>如何用git log命令来查看某个指定文件的提交历史记录
- Tomcat 404 500错误页面上的版本号隐藏或修改
- Qt - 正确判断文件、文件夹是否存在的方法
- 书单
- DMZ
- 解决在IE中获取数据的缓存问题,运行环境为node.js
- bgp配置文件出错调试
- 自定义View
- gcc编译参数-fPIC的一些问题
- shell脚本-变量
- JVM的内存区域划分
- 使用VC库函数中的快速排序函数
- log分析基类
- android用户头像截取