在使用跨域功能时,经常有人会问,我配置了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版本为例

COS 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'

V5域名跨域合规请求

2.执行命令curl 'https://swtest-xxx.cos.ap-beijing-1.myqcloud.com/1.jpg' -voa /dev/null -H 'Origin: http://def.com'

V5域名跨域不合规请求

V4域名测试依然。

1.curl 'https://swtest-xxx.costj.myqcloud.com/1.jpg' -voa /dev/null -H 'Origin: http://abc.com'

V4域名跨域合规请求

2.curl 'https://swtest-xxx.costj.myqcloud.com/1.jpg' -voa /dev/null -H 'Origin: http://def.com'

V4域名跨域不合规请求

可以看到“跨域合规”,有由服务端返回跨域头

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'

OPTIONS请求用例

2.CDN跨域

CDN缓存内容会根据第一次请求的不同而不同。如果第一次请求是跨域的,那么就会缓存住跨域属性。而在CDN控制台的配置中,也是可以单独设置域名的跨域头的,如下

CDN控制台HTTP Header配置

测试CDN跨域curl 'http://abc.winyp.cn/1.jpg' -voa /dev/null -H 'Origin: http://a.com'

验证CDN GET 跨域请求

测试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 OPTIONS 跨域请求

这里可以看出,CDN的header头是强制输出的,并不会判断是否符合跨域规则,强制使用可能会带来安全风险。所以,这种方式只用在特定场景中,并不推荐使用。

更多用法,还需要亲自操作一下,这样会更有体会。

如果您觉得有帮助欢迎传播,如果有任何建议或意见,欢迎下方留言,谢谢。

文章来源于腾讯云开发者社区,点击查看原文