在使用跨域功能时,经常有人会问,我配置了CDN、COS的跨域,但是为什么没有生效呢。怎么来验证配置的是否有效呢。
针对于这个问题,这里给大家演示一下如何配置跨域以及验证有效性。
跨域的基本概念,咱们就不多讲了,不了解的可以恶补一下:
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS
1.COS跨域
当前COS控制台处在V4--V5的过渡阶段,但在两个版本中,都是可以设置跨域的
https://console.cloud.tencent.com/cos/bucket
https://console.cloud.tencent.com/cos5/bucket
我们这里以V5版本为例
在控制台添加规则,例如如下规则(允许http://abc.com域名发起的PUT,GET请求)
设置完成
我们来测试一下,建议使用curl命令。
1.执行命令curl 'https://swtest-xxx.cos.ap-beijing-1.myqcloud.com/1.jpg' -voa /dev/null -H 'Origin: http://abc.com'
2.执行命令curl 'https://swtest-xxx.cos.ap-beijing-1.myqcloud.com/1.jpg' -voa /dev/null -H 'Origin: http://def.com'
V4域名测试依然。
1.curl 'https://swtest-xxx.costj.myqcloud.com/1.jpg' -voa /dev/null -H 'Origin: http://abc.com'
2.curl 'https://swtest-xxx.costj.myqcloud.com/1.jpg' -voa /dev/null -H 'Origin: http://def.com'
可以看到“跨域合规”,有由服务端返回跨域头
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: PUT,GET
Access-Control-Allow-Origin: http://abc.com
“跨域不合规”是没有跨域头的。验证成功。
by the way,对于OPTIONS请求,开启跨域后默认就是支持的
curl 'https://swtest-xxx.cos.ap-beijing-1.myqcloud.com/1.jpg' -voa /dev/null -X OPTIONS -H 'Origin: http://abc.com' -H 'Access-Control-Request-Method: PUT'
2.CDN跨域
CDN缓存内容会根据第一次请求的不同而不同。如果第一次请求是跨域的,那么就会缓存住跨域属性。而在CDN控制台的配置中,也是可以单独设置域名的跨域头的,如下
测试CDN跨域curl 'http://abc.winyp.cn/1.jpg' -voa /dev/null -H 'Origin: http://a.com'
测试CDN OPTIONS 命令curl 'http://abc.winyp.cn/1.jpg' -voa /dev/null -X OPTIONS -H 'Origin: http://abc.com' -H 'Access-Control-Request-Method: PUT'
这里可以看出,CDN的header头是强制输出的,并不会判断是否符合跨域规则,强制使用可能会带来安全风险。所以,这种方式只用在特定场景中,并不推荐使用。
更多用法,还需要亲自操作一下,这样会更有体会。
如果您觉得有帮助欢迎传播,如果有任何建议或意见,欢迎下方留言,谢谢。