主题
阿里云 OSS 跨域与防盗链设置避坑指南
阿里云对象存储(OSS)因其海量、安全、低成本的特点,常被用来存放网站的静态资源(如图片、视频、前端打包文件等)。但在前后端分离的架构中,前端直接请求 OSS 资源时,经常会遇到浏览器报出红色的 CORS 错误;或者为了防止流量被盗刷开启防盗链后,自己网站的图片也无法显示了。本文帮你理清这些配置陷阱。
一、 CORS 跨域问题排查与配置
跨域资源共享(CORS)是浏览器的安全机制。当你的网页运行在 https://www.example.com,而去请求 https://your-bucket.oss-cn-hangzhou.aliyuncs.com 里的资源时,就会触发跨域。
1. OSS 控制台正确配置 CORS
如果前端控制台报错 No 'Access-Control-Allow-Origin' header is present,说明 OSS 没有正确配置允许跨域。
- 进入 OSS 控制台,找到目标 Bucket。
- 依次点击“数据安全” -> “跨域设置” -> “创建规则”。
- 来源(Allowed Origin):填入你前端项目的域名,比如
https://www.example.com。调试时可以填*,但生产环境极不推荐。 - 允许 Methods:勾选
GET,POST,PUT等你需要的方法。 - 允许 Headers:通常填
*即可。
2. 缓存导致的假象
如果你明明配好了规则,浏览器依然报跨域错误,可能是 CDN 或浏览器的缓存。请求 OSS 资源时,如果曾经有过一次失败的预检请求被缓存,后续请求都会失败。请务必清除浏览器缓存,或者在资源 URL 后加个时间戳参数 ?t=123 绕过缓存测试。
二、 防盗链配置的利与弊
OSS 流量是收费的。为了防止别人在他们网站上引用你的图片导致你破产,我们需要设置防盗链(Referer 白名单)。
1. 防盗链设置方法
- 在 Bucket 配置中找到“防盗链”。
- 添加白名单域名,例如
*.example.com。 - 允许空 Referer:这是一个关键选项。如果在浏览器直接输入图片地址访问,Referer 是空的。如果你为了极致安全关闭了“允许空 Referer”,那么除了从你网站发出的请求,其他任何直接访问都会被拒绝(返回 403 Forbidden)。
2. 账号与权限问题排查
如果不仅跨域失败,甚至同源请求也报 403 错误,你需要检查:
- 文件的读写权限(ACL)是否为私有?如果是私有文件,前端不仅需要跨域,还需要在请求中携带临时授权的 Signature。
- 你的阿里云账号是否已经欠费导致 OSS 服务被暂停?
三、 进阶网络问题:为什么配置全对还是报错?
有些开发者发现:在办公室电脑上一切正常,回家或者切换了网络后,防盗链规则似乎失效了,或者原本正常的跨域请求被莫名拦截。
这就进入了网络排查阶段。
1. 本地网络插件或代理篡改请求头
许多人为了屏蔽广告或访问海外技术社区,会在浏览器安装拦截插件,或者在本地运行网络代理软件。这些工具可能会在请求发出前,擅自修改或剥离掉 HTTP 请求中的 Referer 和 Origin 字段。 当 OSS 接收到没有正确 Referer 的请求时,就会触发防盗链机制拦截;当 Origin 丢失时,就会触发 CORS 错误。
网络环境基础排查清单
- 确认已清除浏览器缓存和 Cookie
- 确认代理客户端(如 Clash/v2rayN)已正常启动并接管系统流量
- 确认当前节点并非处于故障或高延迟状态
- 尝试切换全局路由模式或更新本地分流规则
- 若为 PC 端,检查系统时间是否准确自动同步
完成上述基础排查后,再进行本教程针对性的深度检查。
2. 选择纯净且规范的网络代理
这里的排查逻辑非常明确:软件配置正确 -> 账号正常 -> 网络请求头被篡改导致 403 错误 -> 劣质或配置不当的网络节点是元凶。
为了避免在开发和测试过程中遇到这种由网络工具造成的乌龙,你需要使用规则更加规范、分流策略更智能的网络服务。这也正是为什么许多资深前端工程师会寻求靠谱的机场推荐。一个真正的稳定机场不仅提供快速的网络连通性,更应该具备不篡改用户本地局域网请求、智能分流国内外流量的特性。
通过选择高质量的翻墙机场,配置合理的 PAC 规则或路由分流,你可以确保访问阿里云 OSS 等国内资源的请求不经过代理节点,或者确保代理过程原封不动地保留所有必要的 Header 头。如果你的团队因为代理工具而在跨域调试上浪费了大量时间,不妨参考一些专业的 VPN推荐,升级你们的网络环境,让开发回归代码本身。
仍然存在网络连接问题?
如果账号、设备、浏览器、客户端和DNS均已排查,但仍出现连接超时、长连接中断、视频缓冲或出口IP频繁变化,可以继续查看对应场景的线路选择指南。