107
阿里云
OSS防盗链(Referer)配置及错误排除__常见错误及排除_最佳实践_对象存储 OSS-阿里云
什么是Referer
Referer
是HTTP Header的一部分,当浏览器向Web服务器发送请求时,一般会带上Referer,告诉服务器从哪个页面链接过来的。Referer
其实应该是单词Referrer
,不过拼错的人太多了,编写标准的人也就将错就错了。
Referer的作用
- 防盗链。比如,网站访问自己的图片服务器,图片服务器取到Referer来判断是不是自己的域名,如果是就继续访问,不是则拦截。
- 数据统计。比如,统计用户是从哪里链接过来访问的。
Referer为空
空Referer指的是HTTP请求中Referer头部的内容为空,或者HTTP请求中不包含Referer头部。
下面两种情况Referer为空:
- 当请求并不是由链接触发产生。比如,直接把地址输入地址栏里打开页面。
- 从https页面上的链接访问到非加密的http页面时,在http页面上是检查不到Referer的。
在防盗链设置中,允许空Referer和不允许空Referer有什么区别呢?
在防盗链的白名单设置中,如果指名白名单中包含空的Referer,那么通过浏览器地址栏直接访问该资源URL是可以访问到的;但如果不指名需要包含空的Referer,那么通过浏览器直接访问也是被禁止的。
OSS防盗链
OSS防盗链是通过Referer
来实现的,所以也简称为Refer
或refer
,详细说明请参见 OSS防盗链 。
OSS防盗链配置
OSS防盗链包括:
- 是否允许Referer字段为空的请求访问
- Referer字段白名单
OSS防盗链通过在 控制台 或 SDK 设置bucket属性来配置。
OSS防盗链注意点
OSS防盗链配置中有以下注意点:
- 用户只有通过URL签名或者匿名访问Object时,才会做防盗链验证。请求Header中有
Authorization
字段时,不会做防盗链验证。 - 一个Bucket可以支持多个Referer参数,这些参数之间由
,
分隔。 - Referer参数支持通配符
*
和?
,详细解释参见下面的通配符说明。 - 用户可以设置
是否允许Referer字段为空
的请求访问。 - 白名单为空时,不会检查Referer字段是否为空(不然所有的请求都会被拒绝)。
- 白名单不为空,且设置了不允许Referer字段为空的规则,则只有Referer属于白名单的请求被允许,其它请求(包括Referer为空的请求)会被拒绝。
- 如果白名单不为空,但设置了允许Referer字段为空的规则,则Referer为空的请求和符合白名单的请求会被允许,其它请求都会被拒绝。
- Bucket的三种权限(private、public-read、public-read-write)都会检查Referer字段。
通配符说明:
- 星号
*
:代替0个或多个字符。如果正在查找以AEW开头的一个文件,但不记得文件名其余部分,可以输入AEW,查找以AEW开头的所有文件类型的文件,如AEWT.txt、AEWU.EXE、AEWI.dll等。要缩小范围可以输入AEW.txt,查找以AEW开头的所有文件类型并.txt为扩展名的文件如AEWIP.txt、AEWDF.txt。 - 问号
?
:代替一个字符。如果输入love?,查找以love开头的一个字符结尾文件类型的文件,如lovey、lovei等。要缩小范围可以输入love?.doc,查找以love开头的一个字符结尾文件类型并.doc为扩展名的文件如lovey.doc、loveh.doc。
典型配置
所有请求都可以访问
- 空Refer:允许refer为空
- Refer列表: 空
带规定的Referer的请求才能访问
- 空Refer:不允许refer为空
- Refer列表:
https://*.oss-cn-beijing.aliyuncs.com
,https://*.aliyun.com
带规定的Referer的请求、不带Referer的请求可以访问
- 空Refer:允许refer为空
- Refer列表:
https://*.oss-cn-beijing.aliyuncs.com
,https://*.aliyun.com
常见错误及排除
当Referer配置错误时,HTTP状态码(http code)是403,OSS返回如下错误:
<Code>AccessDenied</Code>
<Message>You are denied by bucket referer policy.</Message>
提示:
- Referer报错一般是站点类应用,浏览器中可以查看Header的Referer。如Chrome,按
F12
打开开发者工具
,在Network
中查看相应元素的Header。- OSS返回的错误可以通过抓包获取。如Wireshark,筛选器可以指定为
host bucket-name.oss-cn-beijing.aliyuncs.com
。
可能的原因:
- Referer为空,请求Header中没有Referer字段或者Referer字段为空。
- Referer不在规定的Referer范围内。以下几点请注意:
https://
还是https://
配置时请确认。- a.aliyun.com和b.aliyun.com,匹配于
https://*.aliyun.com
或https://?.aliyun.com
; - domain.com匹配于
https://domain.com
,而不是https://*.domain.com
;
- Referer格式错误,Refer配置必须带
https://
或者https://
,否则无效。如b.aliyun.com是无效配置。
提示:
- 在 OSS控制台 > Bucket > Bucket属性 > 防盗链 中配置Referer。
- 调试时请清空浏览器缓存。
- OSS的Refer只支持白名单, 暂时不支持黑名单。
其它错误的排除请参看 OSS 403错误及排除。
其它问题
设置防盗链后,为什么用curl还是能抓到视频?
检查是否开启了CDN、CDN的Refer设置不为空、CDN的防盗链名单与OSS一致。CDN设置防盗链请参考 防盗链。调试OSS的Referer时,请先排除CDN的影响。先调好OSS的Referer,再调CDN的Referer。
Referer更详细的介绍及配置请参见 防盗链 。
最后更新:2016-11-23 16:04:18
上一篇:
PostObject错误及排查___常见错误及排除_最佳实践_对象存储 OSS-阿里云
下一篇:
STS常见问题及排查__常见错误及排除_最佳实践_对象存储 OSS-阿里云
公共术语__Open API_消息队列 MQ-阿里云
录制索引管理__使用手册_视频直播-阿里云
编译__用户手册_持续交付平台-阿里云
DeleteVServerGroup__VServerGroup相关API_API 参考_负载均衡-阿里云
配置自动快照随磁盘释放__快照_用户指南_云服务器 ECS-阿里云
转换函数__函数_SQL语法参考_云数据库 OceanBase-阿里云
不使用主账号__权限管理_最佳实践_对象存储 OSS-阿里云
应用连接池选择__最佳实践_分布式关系型数据库 DRDS-阿里云
优势__产品简介_云服务器 ECS-阿里云
2.1 数据恢复至7天内任意时间点__2. RDS最佳实践_数据库RDS 体验_体验馆-阿里云
相关内容
常见错误说明__附录_大数据计算服务-阿里云
发送短信接口__API使用手册_短信服务-阿里云
接口文档__Android_安全组件教程_移动安全-阿里云
运营商错误码(联通)__常见问题_短信服务-阿里云
设置短信模板__使用手册_短信服务-阿里云
OSS 权限问题及排查__常见错误及排除_最佳实践_对象存储 OSS-阿里云
消息通知__操作指南_批量计算-阿里云
设备端快速接入(MQTT)__快速开始_阿里云物联网套件-阿里云
查询API调用流量数据__API管理相关接口_API_API 网关-阿里云
使用STS访问__JavaScript-SDK_SDK 参考_对象存储 OSS-阿里云