解决HTTP数据不更新问题——no-cache在HTTP通信协议中的应用

所属分类: 软件教程 / 经验技巧 阅读数: 1877
收藏 0 赞 0 分享
转贴请注明出处:http://blog.csdn.net/froole
HTTP服务器向客户端返回的头信息中可以包含Cache-Control:no-cache信息,意为“数据内容不被储存”。
很多WEB程序设计中,通常并不需要考虑这一点。但是,对相同URL的请求,并需要动态数据时,就需要程序员对服务器返回头信息的进行修改。
例如,通过Ajax向同一个URL发送请求、页面访问同一个URL并需要动态显示页面内容。
在不对服务器所返回头信息做任何修饰的情况下,Cache-Control可能不被添加,此时,浏览器将缓存从服务器取得的信息。如果再次访问网页,浏览器会直接读取缓存数据,而非访问HTTP服务器,如果通过代理再次访问网页,那么,代理服务器将会直接向浏览器返回一个302状态,命令浏览器从缓存读取数据。
本文想定开发人员遭遇以下两种情况:
1.Ajax中,需要通过一个URL适时提取动态数据(例如,使用DWR提取某个POJO的数据);
2.在一个网页中,通过对某个连接的重复访问(发送请求),动态读取不同的页面数据(例如,根据某个项目的列排序)。
如果可以在设计阶段,就已经考虑到通过URL参数,改变URL,倒也不需要考虑缓存的问题。但是,如果URL相同,就会出现相应数据更新迟缓的现象。例如,如果访问速度相对较快,第一次访问和第二次访问的数据,在同一个客户端是相同的。也就是HTTP数据不更新/更新迟缓现象。
解决此问题的方法,就是向服务器的返回头信息“Cache-Control:no-cache”。
PHP的情况,可以向相应的返回处理中添加以下代码:
header("Cache-Control: no-cache");
header("Cache-Control: no-cache");
Java的情况,可以定义相应的URL,通过操作HttpServletResponse定义头信息,如下:

public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
((HttpServletResponse) response).setHeader("Cache-Control", "no-cache");
chain.doFilter(request, response);
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
((HttpServletResponse) response).setHeader("Cache-Control", "no-cache");
chain.doFilter(request, response);
}
以上两个例子,虽然是在不同语言下的实现,但是从HTTP协议通信的角度,其效果是类似的。
使用Cache-Control需要注意的
通过控制Cache-Control头信息,可以让浏览器(代理服务器)及时更新请求数据。但是要注意的是,只有在HTTP1.1下才Cache-Control被支持。
当然,HTTP的版本在大多数WEB开发中,同样不需要考虑。而目前的主流浏览器也都是默认支持HTTP1.1。但是,如果使用IE6,并且通过代理服务器访问网站的时候,浏览器的HTTP请求就要变成HTTP1.0了。这个时候,Cache-Control就会失效,而且无法从服务器端控制HTTP协议版本。只能通过浏览器的设定来解决,方法是,通过IE详细设置中的HTTP1.1设定来解决。如果可能,也可以把目标服务器排除在代理目标之外。
更多精彩内容其他人还在看

2015寒假火车票什么时候可以买?2015寒假火车票开售时间

离寒假还有不到两个月的时间,很多同学为购火车票而头痛,那么2015寒假火车票什么时候可以买呢?现在好消息来了,2015寒假火车票今日开售,最远能够买到一个月后的,下面就和小编一起去看下具体内容吧
收藏 0 赞 0 分享

怎么申请安卓百度地图key?申请百度地图key的教程

怎么申请安卓百度地图key?在做开发的过程中,有时要使用到定位等功能,就可以使用百度地图,而在使用前我们首先要去申请一个百度地图的key才能使用百度地图的功能,需要的朋友可以参考下
收藏 0 赞 0 分享

用搜狗输入法打字不显示选字框该怎么解决

很多朋友在使用搜狗输入法时遇到了不显示选字框的情况,不知道该如何解决,请试一试下文提供的解决方法
收藏 0 赞 0 分享

2015年春运火车票预售时间及抢票攻略全解

最新消息2015年春运期间的火车票预订期限提前到了60天,这样看似提高了抢票的时间跨度,但是也造成了找到窍门的人会早早的抢到票,但是不懂的人想买票的时候票早就被抢完了。下面小编就为大家带来了2015年春运火车票预售时间及抢票攻略,让大家都能回家过个好年
收藏 0 赞 0 分享

使用搜狗输入法打字过程中有卡顿现象的解决方法

近日小编发现自己的搜狗输入法在打字时很卡,这种情况大家是否遇到过,如果不知道该如何下手可以参考下面的解决方法
收藏 0 赞 0 分享

360云盘怎么找资源?360云盘资源搜索方法图解

如今使用360云盘的朋友们也有很多,这种现象致使了360云盘中集中了大量资源,但是很多用户却不知道如何搜索这些精彩资源。那么,360云盘怎么搜索资源呢?针对此问题,本文就为大家图文介绍360云盘资源搜索的方法
收藏 0 赞 0 分享

360云盘中的文件转存到百度云盘的方法图解

目前,360云盘和百度云盘是大家用得最多的两个云存储软件,那么,我们如何将360云盘中的资源转存到百度网盘中呢?针对此问题,本文就为大家图文介绍360云盘转存百度云盘的方法,希望本文可以帮助到大家
收藏 0 赞 0 分享

删除pdf文件中隐藏的网页链接的方法

我经常从网上下载的PDF资料,但是大部分都有隐藏的网页链接,鼠标在PDF页面点一下就会跳转到该网站,都是广告,很烦人,现在分享我删除pdf文件中隐藏的网页链接的方法
收藏 0 赞 0 分享

海淘攻略 比淘宝还便宜三分之一! 亚马逊六国直邮攻略

在Costco入驻天猫之后,又一条造福网购剁手党的好消息在昨天爆出——全球电商巨头亚马逊昨日宣布,即日起开通海外六大站点直邮中国的服务,比淘宝还便宜三分之一下面介绍亚马逊六国直邮攻略
收藏 0 赞 0 分享

电视QQtv版怎么修改人脸识别登陆修改默认为人脸识别登陆

大家是不是用你的QQ账号登陆电视QQtv版后,想使用人脸识别登陆,不知道在哪里修改,下面与大家分享两种人脸识别登陆电视QQtv版,有此需求的朋友可以看看
收藏 0 赞 0 分享
查看更多