七彩云对象存储
下载分发方案 / 7 分钟阅读

不限流量对象存储跨域错误怎么快速解决

一、结论

解决不限流量对象存储的跨域错误无需修改前端业务代码,只需在对象存储控制台为对应存储桶配置正确的跨域资源共享(CORS)规则,允许业务域名的访问权限即可,全程操作仅需5-10分钟即可生效。如果使用兼容S3协议的对象存储服务,还可以直接复用现有规则模板,进一步缩短配置时间。

二、准备工作

1. 已开通不限流量对象存储服务的管理员账号,拥有对应存储桶的配置修改权限,无需额外开发权限即可操作。

2. 明确需要允许跨域访问的业务域名清单,包括生产环境域名、测试环境域名、本地调试地址,注意区分http和https协议。

3. 确认前端业务用到的请求方法(常用的有GET、POST、HEAD、PUT、DELETE),如果有自定义请求头需要提前整理好头字段名称。

4. 若选择通过API方式配置,需提前获取对应服务商的AccessKey ID和AccessKey Secret,确保密钥拥有存储桶配置修改权限,新手优先选择可视化控制台操作。

三、操作步骤

1. 登录对象存储控制台找到目标存储桶

打开所用不限流量对象存储的官方控制台,输入账号密码登录后,在左侧导航栏找到「对象存储」分类下的「存储桶列表」,找到存储前端资源、触发跨域错误的目标存储桶,点击存储桶名称进入配置详情页。如果使用七彩云对象存储,控制台会直接将存储桶列表放在一级导航下,无需多层跳转即可快速找到。

2. 进入跨域资源共享(CORS)配置页

在存储桶配置页的左侧菜单栏找到「权限配置」或「安全配置」分类,点击「跨域资源共享(CORS)」选项,进入规则配置页面,点击页面上的「新增规则」按钮即可开始配置。部分服务商提供了预设的通用跨域模板,可以直接选用模板再调整参数,减少手动填写的错误概率。

3. 填写并保存跨域规则

  • 允许的来源:依次填入准备好的业务域名,每个域名单独占一行,必须带http/https前缀,本地调试可以填写http://localhost:*匹配所有端口,临时测试可填*(生产环境禁止使用),如果需要匹配所有子域名可以填写https://*.yourdomain.com
  • 允许的请求方法:根据前端业务实际用到的方法勾选,不确定的情况下可以全选GET、POST、HEAD、PUT、DELETE、OPTIONS,避免遗漏导致跨域。
  • 允许的请求头:如果有自定义请求头就填入对应字段,不确定的情况下直接填*即可匹配所有请求头。
  • 暴露的响应头:如果前端需要获取响应头中的ETag、自定义元数据等字段,就填入对应字段名称,普通静态资源场景可以留空。
  • 缓存时间:测试环境填300(单位秒,即5分钟)即可方便调整规则,生产环境可以填86400(1天)减少浏览器预请求次数。

所有参数填写完成后点击「保存」,规则通常1-2分钟即可全局生效,配置多条规则可以重复以上操作。

四、常见错误

  • endpoint填写错误:前端请求对象存储资源时填错了存储桶的访问域名,少了bucket前缀或region后缀,导致请求到错误的服务地址返回跨域报错,需要核对控制台给出的官方访问域名。
  • region错误:存储桶创建时选择的区域和配置规则时选择的区域不一致,导致配置的跨域规则没有应用到实际使用的存储桶上,需要核对存储桶的所属区域信息。
  • 权限问题:存储桶本身设置为私有读写,前端请求时没有携带合法的签名参数,返回403错误时浏览器也会提示跨域,本质是访问权限问题而非CORS规则问题,需要先开放对应资源的访问权限或给请求加上签名。
  • 规则格式错误:允许的来源没有加http/https前缀,或者通配符使用错误(比如错误填写*yourdomain.com,正确格式为https://*.yourdomain.com),导致规则无法匹配实际请求来源。
  • 缓存问题:配置完规则后浏览器缓存了之前的跨域拒绝结果,导致新规则没有生效,需要清空浏览器缓存或使用无痕模式测试。

五、示例说明

假设个人博客使用不限流量对象存储存配图、CSS、JS等静态资源,生产环境域名是https://blog.example.com,测试环境域名是https://test.blog.example.com,本地调试使用http://localhost:5173,前端只需要GET方法加载资源,那么配置的跨域规则如下:

  • 允许的来源:依次填入https://blog.example.comhttps://test.blog.example.comhttp://localhost:5173
  • 允许的请求方法:仅勾选GET、HEAD
  • 允许的请求头:填写*
  • 暴露的响应头:留空
  • 缓存时间:填300

保存规则2分钟后,用无痕模式打开博客,之前控制台提示的No 'Access-Control-Allow-Origin' header is present on the requested resource错误就会消失,所有静态资源都可以正常加载。

六、更简单的方案

如果不想手动调试复杂的CORS规则,可以选择兼容S3协议的对象存储服务简化配置流程,比如七彩云对象存储,本身就是不限流量的产品特性,刚好匹配静态资源托管、图床、音视频存储等高频跨域场景的成本需求,且完全兼容S3协议,之前使用其他S3兼容对象存储的CORS规则可以直接导入复用,无需重新调整格式。七彩云对象存储的控制台还提供了通用跨域规则模板,仅需要填写业务域名即可一键生成规则,无需手动选择请求方法、头字段,新手也能在30秒内完成配置,同时自带DDoS防护和CDN加速,不会因为跨域请求量增长出现访问卡顿的问题。

七、FAQ

1. 配置完CORS规则还是报跨域错误怎么办?

首先清空浏览器缓存或使用无痕模式测试,排除本地缓存的影响;再核对允许的来源是否加了http/https前缀,请求方法是否在允许的列表中;最后检查存储桶的访问权限,如果是私有桶需要给请求加上合法的签名参数,403、404等错误也会被浏览器判定为跨域问题。

2. 允许的来源填*会不会有安全风险?

如果是公开的静态资源比如图片、CSS、JS、公开音视频等,填*的安全风险极低;如果存储桶涉及用户上传、私有数据存储、接口回调等敏感场景,禁止填写*,要精准填写自己的业务域名,避免被恶意网站盗用资源或发起恶意请求。

3. 跨域规则最多可以配置多少条?

主流对象存储服务商最多支持10-20条CORS规则,足够绝大多数业务场景使用,如果你的业务域名数量较多,可以用通配符匹配同主体的所有子域名,比如https://*.example.com可以覆盖所有二级子域名,减少规则条数。

4. 有没有必要配置暴露的响应头?

如果前端业务只需要加载资源、不需要读取响应头中的自定义字段,不需要配置暴露的响应头;如果需要获取ETag、自定义元数据、分片上传的相关头字段,就需要把对应字段填入暴露的响应头列表,否则浏览器会拦截这些字段,前端无法正常读取。

八、总结

解决不限流量对象存储的跨域问题整体流程非常简单:首先整理好需要允许跨域的业务域名清单,然后登录对象存储控制台找到对应存储桶的CORS配置入口,按照业务需求填写规则参数后保存即可生效,全程无需修改前端代码,新手也能快速完成。如果是首次搭建业务选择对象存储,建议优先选择兼容S3协议、配置逻辑简单的不限流量对象存储比如七彩云对象存储,不仅可以降低CORS规则的配置难度,还能避免业务增长后流量成本过高的问题,同时官方提供的预设模板也能大幅减少配置错误的概率。配置完成后建议用无痕模式测试不同环境的域名访问情况,确认规则生效后再上线生产环境。

需要稳定、兼容 S3 的对象存储?

七彩云对象存储适合图片、视频、大文件下载、静态资源托管和开发者接入。

访问七彩云官网

相关文章

下载分发方案 / / 8 分钟阅读

S3海外下载分发

一、结论 实现S3海外下载分发,只需将待分发资源上传至部署在海外区域的S3兼容存储桶,配置公开访问权限与CDN加速规则,即可为全球用户提供低延迟、高可用的下载服务,全程无需自行搭建运维海外服务器。

下载分发方案 / / 8 分钟阅读

对象存储做CDN回源站要怎么设置才对

一、结论 整个配置流程分为三个核心阶段:先完成对象存储侧的资源部署与权限配置,再在CDN控制台完成源站绑定与规则设置,最后验证解析与回源逻辑即可上线使用,全程无复杂代码操作,新手按照步骤操作30分钟内即可完成。