部署阿里云CDN遇到的问题及处理办法
应用部署CDN后遇到的几个问题,本文总结一下处理方法
跨域问题
我们的一个项目采用动静分离的部署方式,服务接口在自己的服务器上,静态资源保存在OSS,通过CDN访问。这样在某些型号的终端设备上会有跨域问题
旧的方案
原本的做法,服务接口部署在自己的服务器上,通过域名api.xxx.com访问,不走CDN
静态文件,包括html,css,js,图片等,部署在OSS上,通过域名s.xxx.com访问,经过CDN加速
这种架构在性能上表现很不错,但是服务接口是通过ajax调用的,通过设置Access-Control-Allow-Origin允许跨域请求,但是这需要跨域
而实践发现,在某些移动端的浏览器里,跨域访问失败。比如三星S3,某些vivo手机等。因为这涉及到安卓版本,手机型号,浏览器版本等,很难彻底解决
所以最后就考虑能否通过改进部署方式,来彻底避免跨域请求
新的方案
希望实现2个目的:
1、静态资源和服务接口需要在同一个域名下
2、域名要通过CDN加速,保证性能
现在的做法,是把静态资源和服务接口都部署到自己的服务器上,把自己服务器作为CDN的源站
然后在CDN上配置规则,对于/svc开头的url,不设置缓存(即确保这种请求回源)即可
content-type错误
同样一个视频,在深圳可以打开,在南京地区的android可以打开,南京地区的iPhone无法打开。把链接改成资源实际所在的地址,绕开CDN,就都可以正常访问了,所以定位出是CDN的问题
猜测可能是深圳的CDN节点是好的,南京的android设备和iOS设备访问了不同的节点,而iOS节点有错误
联系了CDN提供商,对方的技术人员也没有定位出问题,最后检查发现,资源的content-type没有设置,是默认的plain/text,改成video/mp4就可以了,可能个别CDN节点对http header敏感