[Java教程]解决在IE中获取数据的缓存问题,运行环境为node.js

0 2015-11-30 20:00:06

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='/images/loading.gif' data-original='http://www.cnblogs.com//js/jquery-1.10.2.min.js') script(src='/images/loading.gif' data-original="http://www.cnblogs.com//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();});、

运行效果可以看出无数次疯狂的点击后,还是“0”,原因就是IE第一次拿到数据后,从相同路径获取数据时采用了默认的缓存策略,当然可以通过IE的设置来规避缓存。

缓存问题,根本上还是响应header的设置问题,只不过IE在发现响应头中没有缓存设置项时会采取缓存策略,和其他浏览器的处理方式不同而已。

缓存很多时候是必须的,比如:新闻页面,升级页面,静态页面,这些资源在被访问后都可以缓存在浏览器段,通过根据资源的更新策略来设置规定的过期时间,可降低同服务器的资源获取次数。

当然在不需要缓存的地方,也要坚决的避免被缓存。

在IE中避免被缓存,如果是一个页面,那么就要在meta中设置缓存。

上面的三项设置其实只要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 状态代码。

本文网址:http://www.shaoqun.com/a/162678.html

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:admin@shaoqun.com。

JS

0

java数据存在ie中_[Java教程]解决在IE中获取数据的缓存问题,运行环境为node.js相关推荐

  1. java 写文件 权限不够_教你解决Linux系统中JAVA创建文件后权限不足的问题

    在作业中,项目使用文件上传. 这个功能很常见. 当Kai Ge今天更改其官方帐户时,他遇到了一个问题,即无法访问下载的文件,也无法通过浏览器访问该文件. 它是怎么发生的? 经过许多问题之后,事实证明这 ...

  2. 尚硅谷大数据技术Spark教程-笔记01【Spark(概述、快速上手、运行环境、运行架构)】

    视频地址:尚硅谷大数据Spark教程从入门到精通_哔哩哔哩_bilibili 尚硅谷大数据技术Spark教程-笔记01[Spark(概述.快速上手.运行环境.运行架构)] 尚硅谷大数据技术Spark教 ...

  3. pandas中的ix,iloc,loc方法获取数据

    import pandas as pd import numpy as np from pandas import Series,DataFrame import matplotlib.pyplot ...

  4. goroutine中使用recover,解决协程中出现panic,导致程序崩溃的问题。recover panic 协程的错误处理

    package mainimport ("fmt""time" )//goroutine中使用recover,解决协程中出现panic,导致程序崩溃的问题. f ...

  5. java引用类型和值类型_[Java教程]JavaScript中值类型和引用类型的区别

    [Java教程]JavaScript中值类型和引用类型的区别 0 2017-02-24 00:00:35 JavaScript的数据类型分为两类:原始类型和对象类型.其中,原始类型包括:数字.字符串和 ...

  6. java excel 操作 jar包_[JAVA]使用POI向Excel中写入数据以及如何在Intellj IDEA中打jar包...

    freddon 发表于2018-05-30 阅读 1383 | 评论 0 给GF写的,现在记录下POI操作Excel读写过程;以及如何在Intellj IDEA中打jar包 代码如下: ``` imp ...

  7. java 微信群发多图文_[Java教程]httpClient实现微信公众号消息群发

    [Java教程]httpClient实现微信公众号消息群发 0 2016-09-21 20:00:10 1.实现功能 向关注了微信公众号的微信用户群发消息.(可以是所有的用户,也可以是提供了微信ope ...

  8. java编程控制电脑硬件_如何快速学习AP计算机中的Java编程?

    AP Computer Science A (APCSA)考试,需要掌握Java编程语言.对于刚学习Java的同学,都应该了解Java编程语言的知识体系结构. 多编程零基础的高中生,在自学一段时间内, ...

  9. java match正则不生效_[Java教程]正则表达式match()函数

    [Java教程]正则表达式match()函数 0 2015-09-26 12:00:31 正则表达式match()函数: 此方法可在字符串内查找一个或多个正则表达式的匹配. 返回值是一个数组,但是此数 ...

最新文章

  1. 如何对linux镜像md5,Linux系统如何校验SHA1和MD5
  2. SVN服务器搭建--Subversio与TortoiseSVN的配置安装
  3. Leetcode: Reverse Linked List II
  4. python叫什么-Python为什么叫爬虫?Python与爬虫有什么关系?
  5. Andrew NG 机器学习编程作业5 Octave
  6. python中字符串的制表符为_零基础学python_03_字符串(拼接+换行+制表符)
  7. 内核启动的C语言阶段——start_kernel函数
  8. ACM常用数列(斐波那契数列、卡特兰数、贝尔数、斯特灵数)
  9. android开源2016_2016年开源年鉴:现在提供印刷版
  10. 【Flink】Metrics运作机制
  11. 跳转引用、禅模式...VS Code 中 11 个快捷键/操作,让你的效率与舒适度翻倍!
  12. 吴恩达神经网络和深度学习-学习笔记-44-anchor box
  13. jsf tree组件_JSF文本组件–标签,文本字段,文本区域和密码
  14. .NET C# + ECharts 初学笔记 后台加载统计图表数据 - 简单示例
  15. Fabric0.6 与1.0
  16. 一度智信|关于拼多多店铺数据分析细节
  17. 初探Java反序列化漏洞
  18. OpenWRT 设置脚本自动更新hosts访问不可描述的站点
  19. gym:Problem A Artwork(并查集思维题)
  20. 可道云微信群机器人功能展示

热门文章

  1. Java接口四个类四则运算_java 实现四则运算小程序
  2. 从零开始学前端:CSS引入 --- 今天你学习了吗?(CSS:Day07)
  3. 向日葵linux 用电脑远程控制与管理,远程控制软件向日葵和teamviewer的区别和使用...
  4. linux网卡绑定和漂移,LINUX修改、增加IP的方法,一张网卡绑定多个IP/漂移IP【转】...
  5. Python自动对Word文件中Python程序进行着色
  6. Python使用扩展库numpy计算矩阵加权平均值
  7. Python批量整理文件名小案例(附公众号第一批赠书活动中奖名单)
  8. JSP环境搭建和入门
  9. 文本以大写字母html,如何强制EditText以大写字母开始文本?
  10. qt改变tab形状_生命吗哪QT灵修 11月18日