前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >清理缓存中的头像

清理缓存中的头像

作者头像
meteoric
发布2018-11-15 17:03:06
2.6K0
发布2018-11-15 17:03:06
举报
文章被收录于专栏:游戏杂谈

晚上和老同事谈及QQ空间头像修改后,页面上其它地方的图像也立马修改过来了。看了一下,说了我的想法(因为以前这样做过):

假设请求地址为 http://abc.com/a.gif

1、在flash设置完成头像后,在地址后面带个随机数,例如:http://abc.com/a.gif?k=xxxxx  将页面中所有能看到之前图像的位置设置为这个地址;

2、用ajax设置头部不缓存后,请求http://abc.com/a.gif这个地址,这样再次请求http://abc.com/a.gif这个地址时,浏览器的缓存已经是最新的了;

其实这是一种较为理想的状态,为什么呢?这种情况是,在设置完成头像后,地址http://abc.com/a.gif再次请求的文件就是最新的了(也就是CDN在设置成功头像后,URL地址被清理过了)。

但同事给我一个地址却是我如此刷新都是旧的(据说会被CDN给缓存一天),但加了随机数后立马是最新的了。要解决这个问题,目前想到的办法是本地存储一个cookie了,里面记录一个版本号,所有主人的头像都使用如下规则进行请求:http://abc.com/a.gif?v=1.x  (1.x是版本号,从cookie中获取),这样就能保存更新过后url始终是最新的,但同时比上面那种方法麻烦一点,每次都得用JavaScript拼一次地址了~ 还得更新和设置版本号,如果cookie被清空了,版本号还不知道从多少算起呢~~~~

所以最好的方式还是想办法去让后台在更新完图像后,马上清理掉CDN中对图像URL的缓存(地址可能不止一个,如果图像有大、中、小三种规格)

讲了半天,还是看看代码,这段代码主要就是请求最新资源的公用方法。(jQuery中实现些方法,你只能改源代码了----我改过JQ的源码)

代码语言:javascript
复制
1: <script type='text/javascript'>   2:     function send(opts){   3:         var xhr = getXHR();   4:            5:         xhr.open(opts._method, opts._url, opts._isAsync);   6:     7:         opts._method = (opts._method || "post").toUpperCase();   8:     9:         if (opts._method == 'POST' && !opts._isHeaderSetted) {  10:             xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');  11:             xhr.setRequestHeader('Content-Type', 'image/jpeg');  12:             opts._isHeaderSetted = true;  13:         }  14:    15:         if(opts._noCache){  16:             xhr.setRequestHeader('If-Modified-Since', 'Thu, 1 Jan 1970 00:00:00 GMT');          17:             xhr.setRequestHeader('Cache-Control', 'no-cache');          18:         }  19:    20:         var d = getStr(opts._data);  21:    22:         xhr.onreadystatechange = function(){  23:             if (xhr.readyState == 4) {  24:                 if (xhr.status >= 200 && xhr.status < 300) {  25:                     opts._callback({});  26:                 }  27:                 else {  28:                     opts._callback('error');  29:                     return;  30:                 }  31:             }  32:         }  33:         xhr.send(opts._method == 'POST' ? d : null);  34:     }  35: </script>

最主要的两段代码:

1、设置请求头部信息

xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xhr.setRequestHeader('Content-Type', 'image/jpeg');

2、设置请求头部不缓存(返回结果正常为200而非304)

xhr.setRequestHeader('If-Modified-Since', 'Thu, 1 Jan 1970 00:00:00 GMT');        xhr.setRequestHeader('Cache-Control', 'no-cache');   

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2011-03-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档