对象存储 CORS 是什么
浏览器直接向对象存储上传或读取对象时受同源策略限制,需要为桶配置 CORS 规则:声明允许的页面来源、请求方法与请求头,并暴露必要的响应头。规则没配好时,前端看到的是跨域被拦截,而不是存储侧返回的业务错误,很容易误判方向。
基本信息
| 常见字段 | AllowedOrigin、AllowedMethod、AllowedHeader、ExposeHeader、MaxAgeSeconds |
|---|---|
| 典型场景 | 浏览器直传(PUT / POST)、读取私有签名链接、分片上传 |
| 生效范围 | 桶级配置,桶内所有对象共用同一套规则 |
| 安全要求 | 来源不要长期写成 *,按业务域名收窄 |
| 调试入口 | 浏览器开发者工具的 Network 面板看 OPTIONS 往返 |
| 配套设置 | 桶权限与临时凭证策略要与 CORS 规则一起收紧 |
典型使用场景
- 前端表单直传对象存储,减轻应用服务器的带宽压力
- 用签名链接在页面里预览图片或下载文件
- 大文件分片上传,逐片向存储发起请求
- 前端需要读取响应头(如 ETag)来校验上传结果
- 多个站点域名共用同一个桶
一条典型 CORS 规则
一条典型 CORS 规则
[
{
"AllowedOrigin": ["https://app.example.com"],
"AllowedMethod": ["GET", "PUT", "POST", "HEAD"],
"AllowedHeader": ["*"],
"ExposeHeader": ["ETag", "x-cos-request-id"],
"MaxAgeSeconds": 600
}
]常见字段含义
| 字段 | 作用 | 注意点 |
|---|---|---|
| AllowedOrigin | 允许的页面来源 | 写具体域名,* 等于对全网开放 |
| AllowedMethod | 允许的请求方法 | 直传需要包含 PUT 或 POST |
| AllowedHeader | 允许携带的请求头 | 临时凭证场景要包含 security-token 类头 |
| ExposeHeader | 前端可读的响应头 | 不配置时前端读不到 ETag |
| MaxAgeSeconds | 预检结果缓存时长 | 调规则后要等缓存过期或换 URL 验证 |
预检请求(OPTIONS)失败的常见原因之一是未允许自定义头(如 x-cos-security-token、x-oss-security-token);先看 Network 里的 OPTIONS 响应,比猜前端代码快得多。
CORS 放宽不等于安全边界放宽:来源限制与桶的写权限要同时收窄。来源开成 * 又允许匿名写入,等于给全网站点开了一个上传接口。