问题描述
请求被拒绝。
问题原因
您发起的请求头中没有Referer字段或Referer字段为空,与请求Bucket设置的防盗链策略不相符。
使用SDK发起的API调用(请求头中包含Authorization字段)不受防盗链策略限制,只有签名URL访问和匿名访问会触发防盗链检查。使用STS临时凭证生成的签名URL不包含Authorization请求头,因此仍会受到防盗链策略校验:当请求Bucket的防盗链配置中AllowEmptyReferer为false,且请求未携带Referer请求头或Referer不在白名单内时,会返回本错误码(0003-00000501);若请求携带的Referer不在白名单内,则返回错误码0003-00000503,请注意区分这两种错误场景。
您可以通过以下命令验证签名URL的防盗链行为:
curl -H 'Referer: https://your-whitelisted-domain.com' '<签名URL>' -o file如果不希望在访问签名URL时携带Referer请求头,也可以将请求Bucket的防盗链策略中AllowEmptyReferer设置为true。
问题示例
例如,您请求的Bucket的防盗链配置中AllowEmptyReferer取值为false,表示不允许Referer字段为空的请求访问OSS。
<RefererConfiguration>
<AllowEmptyReferer>false</AllowEmptyReferer>
<RefererList>
<Referer>*.example.com</Referer>
</RefererList>
</RefererConfiguration>您发起的以下请求中没有携带Referer请求头,导致请求失败。
GET /test.txt HTTP/1.1
Date: Tue, 20 Dec 2022 08:48:18 GMT
Host: BucketName.oss-example-endpoint.aliyuncs.com解决方案
您可以选择以下任意方案解决该问题。
在请求中增加Referer请求头。
GET /test.txt HTTP/1.1 Date: Tue, 20 Dec 2022 08:48:18 GMT Host: BucketName.oss-example-endpoint.aliyuncs.com Referer: https://help.example.com如果您使用STS临时凭证生成的签名URL下载对象,可以在发起请求时通过curl命令添加Referer请求头:
curl -H 'Referer: https://yourdomain.com' 'https://bucket.oss-cn-hangzhou.aliyuncs.com/object?Expires=...&OSSAccessKeyId=...&Signature=...'Referer中的域名需要在Bucket的防盗链白名单中。您可以在OSS控制台的目标Bucket的数据安全 > 防盗链页面查看和配置白名单。
将请求所在Bucket的防盗链策略中
AllowEmptyReferer取值设置为true。<RefererConfiguration> <AllowEmptyReferer>true</AllowEmptyReferer> </RefererConfiguration>
相关文档
该文章对您有帮助吗?