天天看点

OSS跨域资源共享(CORS)错误及排除介绍

cors配置有以下几项:

来源(allowedorigin):允许跨域请求的来源,可以同时指定多个。配置时需带上完整的域信息,例如<code>http://10.100.100.100:8001</code>或<code>https://www.aliyun.com</code>。注意, 不要遗漏了协议名http或https ,如果端口不是默认的<code>80</code>,还需要带上端口。如果不能确定的域名,可以打开浏览器的调试功能,查看header中的<code>origin</code>。域名支持通配符<code>*</code>,每个域名中允许最多使用一个<code>*</code>,例如<code>https://*.aliyun.com</code>。如果来源指定为<code>*</code>,则表示允许所有来源的跨域请求。

method:按照需求开通对应的方法即可,调试时可以全部选择。

allow header:允许的跨域请求header。允许配置多条匹配规则,以回车间隔。在access-control-request-headers中指定的每个header,都必须在allowed header中有对应项。header容易遗漏,没有特殊需求的情况下,建议设置为<code>*</code>,表示允许所有。大小写不敏感。

expose header:暴露给浏览器的header列表,即用户从应用程序中访问的响应头(例如一个javascript的xmlhttprequest对象)。不允许使用通配符。具体的配置需要根据应用的需求确定,只暴露需要使用的header。如果不需要暴露可以不填。大小写不敏感。该项是可选配置项。

缓存时间(maxageseconds):浏览器对特定资源的预取请求(options请求)返回结果的缓存时间,单位为秒。如果没有特殊情况可以稍大一点,比如60秒。该项是可选配置项。

cors的配置方法一般是针对每个访问来源单独配置规则,不将多个来源混到一个规则,多个规则之间不要有覆盖冲突。其它的选项只开放需要的权限即可。

cors配置错误会报如下错误:

浏览器报类似如下错误:

oss报如下错误:

提示: cors报错一般是站点类应用导致,浏览器中可以查看请求详情。如chrome,按 <code>f12</code> 打开 <code>开发者工具</code> ,在 <code>network</code> 中查看相应元素; oss返回的错误可以通过抓包获取。如使用wireshark,筛选器可以指定为 <code>host bucket-name.oss-cn-beijing.aliyuncs.com</code> 。

cors可能错误如下:

<code>来源(allowedorigin)</code>配置不正确;

<code>method(allowedmethod)</code>配置错误;

<code>allow header</code>配置错误;

<code>expose header</code>配置错误。

调试方法:

来源(allowedorigin)设置成<code>*</code>,确认该配置项无误。如果成<code>*</code>后可以成功上传,说明是<code>来源(allowedorigin)</code>配置错误,请根据规则认真检查;

method(allowedmethod) 全部选择(get、put、delete、post、head) ,确认该配置项目无误;

allow header配置成<code>*</code>,确认该配置无误;

expose header设置为指定值或者不填,确认该项配置无误。

在控制台的<code>对象存储oss -&gt; bucket -&gt; bucket属性 -&gt; 跨域设置</code> 配置上述选项。

继续阅读