通过CDN跨域访问时发生报错

通过CDN跨域访问时发生报错

更新时间:2019-03-01 16:58:08

问题描述

  • 问题场景一:CDN配置的加速源站中,请求携带“credentials”参数发生报错。
  • 问题场景二:CDN加速OSS时,客户端请求时发生报错。
报错内容如下。

问题原因

  • 问题场景一:CDN配置的加速源站中,没有在请求头和源站的响应头中配置“credentials”参数。
  • 问题场景二:CDN加速OSS时,OSS不支持设置HTTP响应头“Access-Control-Allow-Credentials”。

解决方案

  • 问题场景一:CDN配置的加速源站中,需要源站设置返回头中有参数“Access-Control-Allow-Credentials:true”。
  • 问题场景二:CDN加速OSS时,在请求时不要设置“Access-Control-Allow-Credentials”参数,如果无法修改请咨询阿里云技术支持,以申请配置域名的HTTP头“Access-Control-Allow-Credentials:true”。

更多信息

Access-Control-Allow-Credentials参数说明

  • “Access-Control-Allow-Credentials”响应头表示是否可以将对请求的响应暴露给页面。返回“true”则可以,其他值均不可以。
  • credentials”可以是Cookies、Authorization headers或TLS client certificates。当作为对预检请求的响应的一部分时,表示是否为真正的请求可以使用“credentials”。注意简单的“GET”请求没有预检,所以如果对资源的请求带了“credentials”,返回这个资源时,响应就会被浏览器忽视,不会返回到web内容。
  • “Access-Control-Allow-Credentials”响应头在工作中与“XMLHttpRequest.withCredentials”或Fetch API的“Request()”构造器中的“credentials”选项结合使用。必须在前后端配置“credentials”,即“Access-Control-Allow-Credentials”header、XHR和Fetch Request中都要配置,才能使携带“credentials”的CORS请求成功。

适用于

  • CDN