问题描述
在CDN源站是COS的场景下,如果COS服务配置了跨域策略, CDN没有配置相关的跨域策略, 那么当用户请求CDN时, 如果节点没有缓存,则发起回源。 节点会缓存源站返回的跨域头部。 后续请求再次命中接点时,会直接返回缓存的跨域头, 这样可能会出现返回跨域头信息不匹配,造成的跨域错误。
访问流程如下:
解决方案
跨域资源共享(Cross-Origin Resource Sharing,CORS)机制,我们简称为跨域访问,允许 Web应用服务器进行跨域访问控制,从而使跨域数据传输得以安全进行。CORS 需要浏览器和服务器同时支持。目前,所有浏览器都支持该功能,IE 浏览器要求版本 IE10 或以上。实现 CORS 通信的关键是服务器。只要服务器实现了 CORS 接口,即可跨源通信。CDN和COS均支持跨域头设置,可供用户灵活使用。
当CDN的源站是COS的时候,如果COS设置了跨域头,建议CDN的跨域头和COS保持一致的设置,避免CDN缓存头不全,造成的其他用户本想放行的域名跨域头不匹配。 如果COS没有设置跨域头,直接在CDN设置了跨域头, 用户访问CDN的时候以CDN的设置为准。
1. 查看及配置COS源站相关的跨域策略
来源 Origin:允许跨域请求的来源。支持添加域名和 IP 地址。
- 域名末尾不需要携带
/
。 - 可以同时指定多个来源,每行只能填写一个。
- 配置支持
*
,表示全部域名和 IP 地址都允许,不推荐。 - 支持单个具体域名,形如
http://www.abc.com
。 - 支持二级泛域名,形如
http://*.abc.com
,但是每行只能有一个*
号。 - 注意不要遗漏协议名 http 或 https,若端口不是默认的80,还需要带上端口。其中 IP 地址的举例为
http://10.10.10.10
。
2. 查看CDN配置, 确保源站如果设置了,和源站一致的跨域策略
点开对应CDN的域名『域名管理』--》『高级配置』里面有HTTP响应头配置,查看是否和源站配置了一致的跨域策略。
Access-Control-Allow-Origin用于解决资源的跨域权限问题,域值定义了允许访问该资源的域。若来源请求 Host 在域名配置列表之内,则直接填充对应值在返回头部中。也可以设置通配符 “*”,允许被所有域请求。更多说明请见Access-Control-Allow-Origin 匹配模式介绍。
支持输入“*” ,或多个域名 / IP / 域名与 IP 混填(必须包含http://
或https://
,填写示例:http://test.com,http://1.1.1.1
, 逗号隔开)(注意:输入框最多可输入1000字符)。
注意事项
更多详细资料请参见关于 HTTP 访问控制的说明;
官方文档COS跨域设置参考设置跨域访问 CDN设置参考HTTP响应头设置