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的数据安全 > 跨域设置,创建规则如下:

参数

配置值

说明

来源

https://www.example.com

只允许来自该特定网站的请求,保障资源安全。

允许Methods

GET,HEAD

GET下载资源,HEAD用于缓存校验。

允许Headers

留空

此场景为简单请求,不触发预检,因此该项配置不会被用到,留空即可。

暴露Headers

ETag,Content-Length

  • ETag: 允许浏览器通过HEAD请求进行缓存校验,若文件未变则返回304 Not Modified,避免重复下载。

  • Content-Length: 可用于在前端显示资源加载进度。

缓存时间

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 方法。如果网站只需要读取数据,则只配置GETHEAD

  • 具体指定允许Headers(AllowedHeader):对于携带认证信息(如Authorization头)的请求,严禁使用*,必须明确列出所有必要的请求头。

性能最佳实践

  • 优化预检缓存:为 缓存时间 (MaxAgeSeconds) 设置一个合理的值(如 86400 秒,即24小时),可以显著减少预检请求的数量,降低延迟和请求成本。

  • 评估Vary: Origin 的影响:启用 返回 Vary: Origin 虽然可以解决缓存污染问题,但会增加CDN缓存的复杂性,可能导致缓存命中率下降和回源流量增加,从而产生额外成本和延迟。请在评估后使用。

CDN加速场景

如果Bucket开启了CDN加速并使用CDN域名访问,跨域请求将首先到达CDN节点。此时,必须在CDN控制台配置CORS规则,而不是在OSS。OSS侧的CORS配置仅在请求直接访问OSS源站域名时生效。

作者 admin

百度广告效果展示