【发布时间】:2018-01-15 07:53:38
【问题描述】:
我在 Heroku 设置了服务器,并使用 Amazon s3 进行图像存储(使用 carrierwave gem 上传它们),但有时我会收到奇怪的 403 错误:
“加载资源失败:服务器响应状态为 403 (Forbidden)”
(见下图)
如果我重新加载页面,图像会再次显示。
我已经设置了一个 CORSRule:
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<ExposeHeader>ETag</ExposeHeader>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<ExposeHeader>Accept-Ranges</ExposeHeader>
<ExposeHeader>Content-Range</ExposeHeader>
<ExposeHeader>Content-Encoding</ExposeHeader>
<ExposeHeader>Content-Length</ExposeHeader>
<AllowedHeader>Range</AllowedHeader>
<AllowedHeader>Authorization</AllowedHeader>
</CORSRule>
</CORSConfiguration>
我不是 CORSRule 方面的专家,我尝试了一些,但如果有人能指出我正确的方向,我会很高兴。
--------------- 更新 --------------
这里有我的请求常规、响应标头和缺少图像时的请求标头。
一般
Request URL:https://exnerbilleder.s3.amazonaws.com/nye/uploads/image/image/215/thumb_5.jpg
Request Method:GET
Status Code:403 Forbidden
Remote Address:52.95.150.17:443
Referrer Policy:no-referrer-when-downgrade
响应标头
Content-Type:application/xml
Date:Tue, 08 Aug 2017 15:49:49 GMT
Server:AmazonS3
Transfer-Encoding:chunked
x-amz-id-2:EG4D5X29x8eAuu+xD9PdG2MsdGYnWHnpkuOc87p1h7nbFgvk57S6Be631UwTdF9tHMauoAjf6j4=
x-amz-request-id:0C43705C41CD57C9
请求标头
Accept:image/webp,image/apng,image/*,*/*;q=0.8
Accept-Encoding:gzip, deflate, br
Accept-Language:da-DK,da;q=0.8,en-US;q=0.6,en;q=0.4
Connection:keep-alive
Host:exnerbilleder.s3.amazonaws.com
Referer:http://inger-exner.herokuapp.com/works/slotsgarden
User-Agent:Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Mobile Safari/537.36
访问网站
访问the site可能会遇到问题
【问题讨论】:
-
需要更多细节。特别是来自失败请求的请求和响应标头。
-
好的。你知道我在哪里可以找到它们吗?是在亚马逊页面上吗?
-
在浏览器的开发者工具中。 stackoverflow.com/a/4423097/1695906
-
我已经更新了答案。 :)
-
我写了亚马逊支持,他们回答:这个问题的根本原因是一个错误,导致少数身份验证和授权服务主机错过了应用于您帐户的更改。 他们将订阅数据更新推送到所有服务主机,这为我解决了问题。
标签: ruby-on-rails heroku amazon-s3 http-status-code-403