Access to font at ‘http://demo.com/resource/font/fontawesome-webfont.woff?v=3.2.1’ from origin ‘http://test.com’ has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present on the requested resource.
通过为OSS配置跨域资源共享(CORS)规则,可以安全授权指定网站访问OSS资源,让网页直接操作文件。
网站静态资源加载
步骤一:配置CORS规则
登录OSS管理控制台,进入目标Bucket的数据安全 > 跨域设置,创建规则如下:
参数 |
配置值 |
说明 |
来源 |
|
只允许来自该特定网站的请求,保障资源安全。 |
允许Methods |
|
GET下载资源,HEAD用于缓存校验。 |
允许Headers |
留空 |
此场景为简单请求,不触发预检,因此该项配置不会被用到,留空即可。 |
暴露Headers |
|
|
缓存时间 |
86400 |
缓存预检结果24小时,减少未来可能产生的预检请求。 |
返回Vary Origin |
不勾选 |
由于来源是单一且确定的,无需开启此项来处理多域名缓存问题。 |
来源:
http://*.demo.com
https://*.demo.com
允许Methods:
GET
步骤二:验证配置
访问http://demo.com
,确认OSS资源(如图片)加载正常,且浏览器控制台无CORS错误。
应用于生产环境
安全最佳实践
遵循最小权限原则。
-
精确配置
来源(AllowedOrigin)
:除非 Bucket 是完全公开的,否则严禁将AllowedOrigin
设置为*
。应精确指定提供服务的网站域名,例如https://www.example.com
。 -
收紧
允许Methods(AllowedMethod)
:只开放业务必需的 HTTP 方法。如果网站只需要读取数据,则只配置GET
和HEAD
。 -
具体指定
允许Headers(AllowedHeader)
:对于携带认证信息(如Authorization
头)的请求,严禁使用*
,必须明确列出所有必要的请求头。
性能最佳实践
-
优化预检缓存:为
缓存时间 (MaxAgeSeconds)
设置一个合理的值(如86400
秒,即24小时),可以显著减少预检请求的数量,降低延迟和请求成本。 -
评估
Vary: Origin
的影响:启用返回 Vary: Origin
虽然可以解决缓存污染问题,但会增加CDN缓存的复杂性,可能导致缓存命中率下降和回源流量增加,从而产生额外成本和延迟。请在评估后使用。
CDN加速场景
如果Bucket开启了CDN加速并使用CDN域名访问,跨域请求将首先到达CDN节点。此时,必须在CDN控制台配置CORS规则,而不是在OSS。OSS侧的CORS配置仅在请求直接访问OSS源站域名时生效。