OBS跨域资源共享(CORS)错误&故障解决

网友投稿 1676 2022-05-29

概念解释

CORS配置有以下几项:

允许的来源(Access-Control-Allow-Origin)

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

允许的方法(Access-Control-Allow-Methods)

按照需求开通对应的方法即可,注意尽量不要勾选Delete方法。防止对于资源的误删除操作

允许的头域(Access-Control-Expose-Headers)

允许的跨域请求header。允许配置多条匹配规则,以回车间隔。在Access-Control-Request-Headers中指定的每个header,都必须在Allowed Header中有对应项。Header容易遗漏,没有特殊需求的情况下,建议设置为*,表示允许所有。大小写不敏感。

补充的头域(Access-Control-Expose-Headers)

此处翻译为补充的头域实际有点不妥,实际此头域的含义是允许暴露给浏览器使用的头域更合适些。 ,即允许网页中的应用程序中能够访问的响应头(例如一个Javascript的XMLHttpRequest对象)。不允许使用通配符。具体的配置需要根据应用的需求确定,只暴露需要使用的header。如果不需要暴露可以不填。大小写不敏感。该项是可选的。在使用JavaScript和网页响应有交互的程序实现时需要注意此处配置。

缓存时间(Access-Control-Max-Age)

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

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

如下图是一个完整的CORS响应的头域内容。仅供参考。

跨域共享请求配置请参考:https://support.huaweicloud.com/usermanual-obs/zh-cn_topic_0066036542.html

错误排除

CORS配置错误 会在浏览器报如下错误:

同时伴随着还有OBS服务侧返回的错误

CORS可能错误如下:

允许的来源 配置不正确

允许的方法 配置错误

允许的头域 配置错误

补充头域 配置错误或缺失(使用JS进行多段上传)

调试方法:

将 允许的来源 设置成*,确认该配置项无误。如果设置成*后可以成功上传,说明是来源(AllowedOrigin)配置错误,请根据规则认真检查。

选择 允许的方法 的部分选项(GET、PUT、POST、HEAD),确认该配置项目无误(删除不选,跨域访问几乎没有删除资源类操作)。

将 允许的头域配置成*,确认该配置无误。

将补充头域 设置为指定值或者不填,确认该项配置无误。

如下截图是一个典型的配置

使用JS在多段上传时候的CORS问题:

对于使用OBS的JavaScript脚本在web端进行多段上传时候,在最终多段合并时候会报如下类似的错误,多段合并时候每个段的Etag值 为undefined 。

解决方法:

在补充头域中增加Etag头域值设置,即可解决此问题。

原因是JS需要从浏览器响应中获取Etag值,但是CORS规则没有允许程序获取此头域值,因此出现此问题。如果要获取跟多响应头域则在 补充头域中增加即可。如content-length。

出现问题如下图所示:

使用js在普通上传时候出现cors问题,但是cors的配置都是正确的。

OBS跨域资源共享(CORS)错误&故障解决

这个时候需要排查使用AK SK是否有权限,原因多半是 AK SK配置错误或者没权限 导致服务端返回的403错误码,403响应中没有包含cors信息而被浏览器拦截,误认为是cors配置或者功能有问题。

对象存储服务 OBS

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:【C++】如何阅读别人的代码?如何阅读别人的C++代码?如何高效学习他人代码
下一篇:一个网工的十年奋斗史 - 工作篇
相关文章