如何排查请求CDN加速域名出现的跨域问题?

边缘云CDN与加速技术服务知识库
问题描述

请求CDN加速域名出现跨域报错,具体信息如下:

The 'Access-Control-Allow-Origin' header has a value 'http://xxxx' that is not equal to the supplied origin.

图片

问题分析

从问题描述的内容可以看出,CDN 响应的 Access-Control-Allow-Origin 跨域头的 Value 值,和客户端请求的 Origin 跨域头不一致,导致浏览器没有响应这个请求。例如,请求跨域头为 “Origin:http://域名A”,但是响应的跨域头为“Access-Control-Allow-Origin:http://域名B”。出现该问题的原因有以下三种情况: 1. CDN 配置的跨域头和客户端请求的 Origin 不一致 2. 源站配置的跨域头被CDN缓存 3. 浏览器缓存

解决方案

1. 解决 CDN 配置的跨域头和客户端请求的 Origin 不一致问题。

请检查 CDN 配置的跨域响应头,与客户端请求的 Origin 头是否一致。配置详情请参见文档配置 HTTP 响应头图片

2. 解决源站配置的跨域头被 CDN 缓存问题。

第一次客户端请求时:

请求跨域头为 “Origin:http://域名A”,CDN没有命中缓存,按照规则去回源,由于源站配置了跨域头,响应了 “Access-Control-Allow-Origin:http://域名A”

第二次客户端请求时:

请求跨域头为 “Origin:http://域名B”,但是由于CDN之前已经缓存了第一次请求的数据,从而会直接返回缓存数据,而缓存数据里跨域响应头为 “Access-Control-Allow-Origin:http://域名A”。

这就导致响应的值和客户端不匹配,导致被浏览器拒绝访问。针对该请求可以尝试以下方法: 源站不用配置跨域头,仅在 CDN 上配置跨域头即可。配置完成后刷新 CDN 的缓存,将历史缓存都清除掉。再次尝试浏览器访问观察问题是否解决。

3. 解决浏览器缓存问题。

第一次客户端请求时,请求跨域头为 “Origin:http://域名A”,CDN响应了“Access-Control-Allow-Origin:http://域名A”

第二次客户端请求时,请求跨域头为 “Origin:http://域名B”,但是由于浏览器缓存了上一次请求的结果,直接返回了缓存数据,而缓存数据里跨域响应头为 “Access-Control-Allow-Origin:http://域名A”, 导致响应的值和客户端不匹配,导致被浏览器拒绝访问。

出现这种问题时,需要强制浏览器的缓存。且为了避免这种情况的发生,建议在 CDN 上配置 Cache-Control 为 no-cache ,强制浏览器不缓存数据。 图片 如果您有其他问题,欢迎您联系火山引擎技术支持服务

0
0
0
0
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论