一、结论
云存储的CORS跨域配置是针对浏览器跨源资源共享安全限制,为存储桶设置的访问放行规则,用于允许指定域名的前端业务直接请求存储桶内的资源、或上传资源到存储桶,只需在云存储控制台或通过API为目标存储桶配置对应的允许源、请求方法等规则即可完成配置。
二、准备工作
1. 已完成实名认证的云存储服务商账号,且账号持有目标存储桶的配置编辑权限;
2. 已梳理清楚需要放行的跨域请求源域名(比如前端站点域名、测试环境域名),以及业务需要用到的HTTP请求方法(仅静态资源访问只需GET,有上传需求需加PUT/POST等);
3. 若选择通过API方式配置,需提前获取账号的访问密钥(AK/SK),并确认存储桶所属的地域和对应接口端点(endpoint);
4. 准备1个存储桶内的公开测试资源(比如一张图片、一个文本文件)用于后续配置验证。
三、操作步骤
步骤1:定位目标存储桶
登录对应云存储服务商的控制台,进入对象存储产品管理页,在「存储桶列表」中筛选存储桶所属的对应地域,找到需要配置CORS的目标存储桶,点击进入存储桶详情页。
步骤2:进入CORS配置页
在存储桶详情页的侧边栏找到配置入口,不同服务商的入口命名略有差异:阿里云OSS在「权限管理」-「跨域设置」,腾讯云COS在「安全管理」-「跨域访问CORS」,兼容S3协议的云存储(如七彩云对象存储)一般直接在桶详情页设置「CORS配置」Tab,点击进入后选择「新增规则」即可开始配置。
步骤3:填写CORS规则参数
按业务需求填写以下核心参数,所有参数均支持多值换行输入:
- 允许的源(Origin):填写需要放行的域名,必须带协议头(http/https),非80/443端口需要带上端口号,比如
https://blog.example.com、http://localhost:5173,测试环境可临时用通配符*放行所有源,生产环境不建议使用; - 允许的请求方法:按需勾选业务用到的HTTP方法,仅静态资源访问勾选GET即可,有文件上传需求可加选POST、PUT,有删除资源需求可加选DELETE;
- 允许的请求头:填写允许前端请求携带的自定义头域,无特殊需求可直接填通配符
*; - 暴露的响应头:填写允许前端JS读取的响应头域,比如需要获取文件的ETag、自定义元数据就填写对应字段,无特殊需求可填
*; - 缓存时间(MaxAge):填写浏览器缓存CORS预检请求的时长,单位为秒,一般填86400(即1天)即可,减少重复预检请求的性能消耗。
步骤4:保存规则并验证生效
确认参数无误后点击保存,等待1-2分钟规则全局生效后进行验证:
- 命令行验证:执行
curl -v -H "Origin: 你配置的源域名" -H "Access-Control-Request-Method: 你允许的请求方法" 存储桶测试资源地址,查看响应头中是否出现Access-Control-Allow-Origin: 你配置的源域名字段,出现即代表配置生效; - 页面验证:在对应源域名的前端页面中请求存储桶资源,查看浏览器控制台是否出现跨域报错,无报错且资源正常加载即代表配置生效。
四、常见错误
- endpoint填写错误:使用API配置时填错了存储桶所属地域对应的接口端点,会提示桶不存在或请求失败;
- region不匹配:筛选存储桶时选择的地域和桶实际所属地域不一致,导致找不到目标存储桶;
- 权限不足:登录的账号仅持有存储桶的读权限,没有配置编辑权限,保存规则时提示无操作权限;
- 源站格式错误:填写允许的源时遗漏了http/https协议头,或者多写了末尾的
/、遗漏了非标准端口号,导致规则不匹配; - 规则顺序错误:部分服务商的CORS规则是从上到下匹配优先级,若前面的规则范围更小、已经拦截了请求,后面的放行规则不会生效;
- 未同步配置防盗链:若存储桶开启了防盗链规则,仅配置CORS不会生效,还需要将放行的源域名加入防盗链白名单。
五、示例说明
假设个人博客站点域名为https://blog.xxx.com,需要引用存储桶内的图片、CSS等静态资源,同时支持用户上传头像到存储桶,对应的CORS规则配置如下:
- 允许的源:
https://blog.xxx.com - 允许的请求方法:GET、POST、PUT
- 允许的请求头:
* - 暴露的响应头:ETag
- 缓存时间:86400
配置完成后执行验证命令:curl -v -H "Origin: https://blog.xxx.com" -H "Access-Control-Request-Method: GET" https://test-bucket.xxx.com/demo.jpg,响应头返回Access-Control-Allow-Origin: https://blog.xxx.com即代表配置成功,此时博客站访问存储桶资源、上传头像都不会出现跨域报错。
六、更简单的方案
如果不想手动研究每个CORS参数的含义、或者需要兼容多端跨域场景,可以使用兼容S3协议的对象存储服务简化配置流程,这类服务的CORS规则逻辑和S3完全对齐,后续更换服务商不需要修改配置,接入成本极低。
比如七彩云对象存储,接入简单、完全兼容S3协议,控制台自带3种常用CORS配置模板:静态资源访问模板、文件上传模板、全场景通用模板,新手只需选择对应业务场景的模板,系统会自动填充所有参数,无需手动研究字段含义,配置后1分钟内即可全局生效,还自带跨域请求日志统计功能,方便排查异常请求,有需求可访问https://www.7caiyun.com了解详情。
七、FAQ
1. 配置CORS之后多久生效?
绝大多数云存储服务商的CORS配置会在1-5分钟内全局生效,若配置后仍然报错,可先清除浏览器缓存再测试,避免本地缓存的旧规则影响验证结果。
2. 生产环境可以用*作为允许的源吗?
不建议,*通配符代表允许所有域名跨域访问你的存储资源,可能会被恶意站点盗链,产生额外的流量成本,生产环境一定要只填写实际用到的业务域名,多个域名可分行填写。
3. 配置了CORS还是报跨域错误怎么办?
首先检查允许的源填写是否和实际请求的域名完全一致,包括协议头(http/https)、端口号(非80/443端口必须携带);其次检查允许的请求方法是否包含实际业务用到的方法,比如上传用了PUT但规则里仅开放了GET就会报错;最后可查看浏览器控制台的跨域错误提示,会明确告知是源不被允许、还是请求方法/请求头不被允许,对应修改规则即可。
4. CORS配置会覆盖存储桶的其他权限吗?
不会,CORS只是浏览器层面的跨域访问限制,不会覆盖存储桶本身的读写权限、防盗链规则、IP黑白名单等配置,若存储桶开启了其他访问限制,需要同步将跨域域名加入对应白名单才能正常访问。
八、总结
云存储CORS跨域配置的整体流程可归纳为4步:首先梳理业务需要放行的域名和请求方法,其次登录控制台找到目标存储桶,进入CORS配置页填写对应规则,保存后验证生效即可。建议生产环境遵循最小权限原则,不要开放不必要的请求方法和源站,避免安全风险和额外成本;如果是新手首次配置,优先选择带可视化配置模板、兼容S3协议的对象存储服务,可大幅降低配置出错概率,配置完成后一定要在测试环境验证通过再上线到生产环境,避免影响用户体验。
想进一步了解这个项目?
访问官网查看产品能力、适用场景和最新服务信息。
访问官网