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

所属分类: 软件教程 / 经验技巧 阅读数: 1910
收藏 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设定来解决。如果可能,也可以把目标服务器排除在代理目标之外。
更多精彩内容其他人还在看

12306登录不核验第四天不能买票 要买票需重新注册

12306是目前铁道部唯一的一个官方购买的途径,为了防止黄牛党的出现,开始执行手机双向核验,通过手机发送数字到12306得到验证码进行验证
收藏 0 赞 0 分享

铁路客户服务中心12306怎么对手机双向核验?待核验未通过怎么办?

为确保广大旅客的正常出行,保护旅客的个人信息安全,并将购票信息准确送达旅客,12306网站对注册用户手机可联络性进行核验。那么铁路客户服务中心12306怎么对手机双向核验?待核验未通过怎么办?下面小编就为大家介绍一下,来看看吧
收藏 0 赞 0 分享

12306铁路客户服务中心如何订购火车票?订票流程图解

中国铁路服务中心网站是铁路服务客户的重要窗口,将集成全路客货运输信息,为社会和铁路客户提供客货运输业务和公共信息查询服务。那么12306铁路客户服务中心如何订购火车票?下面小编就为大家介绍订票流程,一起来看看吧
收藏 0 赞 0 分享

2016年春运火车票抢票最牛攻略 别忘了返程票

为了能回家过年,大家也是卯足了力气抢票,但是,抢票也是有小技巧的,怎么才能抢到2月7日(春节)之前的票呢?抢到了以后怎么抢返程的票呢?请看下问详细介绍,需要的朋友可以参考下
收藏 0 赞 0 分享

12306怎么购买火车票下铺车票?12306火车票选上下铺的技巧

12306怎么购买火车票下铺车票?购买火车票卧铺的时候,下铺当然是最好的,商铺不好上,中铺太矮,只有下铺最好,但是下铺不好抢,该怎么才能成功抢到火车票下铺票呢?请看下文详细介绍
收藏 0 赞 0 分享

2016春运抢票什么时候开始 2016年春运抢票时间表

很多朋友关心2016春运抢票什么时候开始,今天小编就为大家带来2016年春运抢票时间表,大家抓紧看看吧
收藏 0 赞 0 分享

12306绑定qq邮箱收不到验证码该怎么找回密码?

12306绑定邮箱收不到验证码该怎么找回密码?12306账号的密码丢了,没办法买票,在重置密码的时候,发现qq邮箱收不到重置密码的验证码,该怎办呢?下面分享这个问题的解决办法,需要的朋友可以参考下
收藏 0 赞 0 分享

使用12306购买2016年春运火车票新规则及注意事项

准备购买2016年春运火车票的朋友注意啦,12306购票除了新规则及注意事项,主要是用来压制黄牛贩票的,但是正常买票的朋友要遭殃了,下面我们来看看使用12306购买2016年春运火车票新规则及注意事项
收藏 0 赞 0 分享

12306公告:2016年春运火车票首日订票开始了

2016年的春运火车票今天开始售票啦,我们可以通过三种不同的途径来购买,但是必须注意,不同渠道售票期不同,最长预售期为60天;最短预售期为40天,需要的朋友可以进来参考一下
收藏 0 赞 0 分享

12306身份证被别人注册了怎么办 12306身份证被注册解决办法

12306身份证被别人注册了怎么办呢?注册账号时,系统提示身份证信息重复并非本人使用时,该怎么解决呢?或者系统显示身份证被注册了怎么办呢
收藏 0 赞 0 分享
查看更多