关于热更新CDN缓存的问题

一个场景:
0.31版本,某个文件的url为:http:/xxx/hotupdate/res/hello.png,md5为11111111111111111111,
0.32版本,这个文件url还是一样,但是图片换掉了,md5为2222222222222222222,
这样对手机来说知道了文件差异,但是在下载的时候由于还是http://xxx/hotupdate/res/hello.png这个地址,cdn缓存可能导致http://xxx/hotupdate/res/hello.png访问的数据还是0.31版本的hello.png

这个有什么好的解决方案吗?

本来想做一个URL拼接,在请求下载的URL后面加上?md5=2222222222222222222,变成http:/xxx/hotupdate/res/hello.png?md5=2222222222222222222,这样每次访问的时候如果md5不一样了,就不会下载cdn缓存的旧文件而是新文件了
不过发现URL拼接是在C++底层做的,js层似乎干预不到,不知道有没有大神能支个招,如何做到拼接或者换一种方法解决CDN缓存问题

1赞

这确实是一个常规的需求,我们在后面会支持

现在不是能自动加 md5 了么?

这种加入拼接参数的做法只能解决本地缓存问题,无法解决CDN缓存的问题.
参数在到达CDN节点的时候就已经被过滤了,CDN节点判断到有该文件是不会再向CDN源站请求的,只有靠等待同步时间未知非常不靠谱的的主动推送来同步到各分站.

想要保证下载的资源绝对正确只有通过加前缀的方式, 比如 1111hello.png 2222hello.png, 或者是 http://xxx/0.31/res/hello.png http://xxx/0.32/res/hello.png

CDN不是有刷新功能么

这样把资源名称都改了啊

现在不是能自动加 md5 了么?

分文件夹的话,文件夹里放的是整个包的资源还是只是这次更新所需要的资源?如果是只需要更新的资源,那假如热更新有删除资源的话,这种情况多余的资源是删不掉的,会造成用户的手机可能会有大量的冗余资源

md5只能比对出本地资源和远端资源哪些有差异,却不能确定从服务器上下载的是CDN缓存着的文件还是原站的文件。就算md5不一样了,但是下载地址是一样的,还是可能会下载到CDN缓存着的旧资源,就像我上面的例子

现在自动加 md5,是加到文件名上面的。怎么可能下载地址还一样???

1赞