Kin*_*arō 9 ajax amazon-s3 amazon-web-services http-status-code-403
我试图从ajax请求访问驻留在S3中的html文件,我收到403错误.
我在线阅读AWS,如果我这样做,我需要设置AWS CORS规则来修复403错误.
但是,我已经尝试了两天而且没有任何运气.这是我的CORS配置:
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<ExposeHeader>XMLHttpRequest</ExposeHeader>
<AllowedHeader>x-csrftoken</AllowedHeader>
</CORSRule>
</CORSConfiguration>
Run Code Online (Sandbox Code Playgroud)
我的HTTP请求如下:
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding gzip, deflate
Accept-Language en-US,en;q=0.5
Access-Control-Request-He... x-csrftoken
Access-Control-Request-Me... GET
Connection keep-alive
Host xxxxxxxxx.cloudfront.net
Origin http://localhost:8000
User-Agent Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:18.0) Gecko/20100101 Firefox/18.0
Run Code Online (Sandbox Code Playgroud)
谁能帮我看看我错过了什么?
谢谢!
对于那些因跨源 s3 访问的 OPTIONS 请求而来到这里并没有找到所需内容的 403 的人,也许我的经验可以提供帮助。
太棒了;浏览器设计为在来自不同来源的 302 重定向上将来源设置为null
我还在对存储桶上的资源进行预检请求时遇到了 CORS 问题,如果直接浏览到该资源,该资源就可用。
我在存储桶上配置了 CORS,并使用正确的可接受的标头和来源。像下面这样的东西。
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>http://localhost:8080</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>HEAD</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>authorization</AllowedHeader>
</CORSRule>
</CORSConfiguration>
Run Code Online (Sandbox Code Playgroud)
然后我收到了一个错误
Access to XMLHttpRequest at 'https://[REDACTED].s3.amazonaws.com/[REDACTED]?AWSAccessKeyId=[REDACTED]' (redirected from '[REDACTED]') from origin 'null' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Run Code Online (Sandbox Code Playgroud)
检查请求标头后,很明显,一个可疑的事情是 Origin 的值为“null”。
Access-Control-Request-Headers: authorization
Access-Control-Request-Method: GET
Origin: null
Referer: [REDACTED]
User-Agent: [REDACTED]
Run Code Online (Sandbox Code Playgroud)
事实证明,出于安全问题,浏览器被设计为在来自不同来源的 302 重定向上将来源设置为null 。更多信息请点击这里。
除了不进行重定向之外,没有其他方法可以解决此问题。我必须重新设计正在执行重定向的后端资源,以提供直接访问 s3 bbject 的链接。
HTTP 403(禁止)并不一定意味着您需要 CORS。一种选择是将所有请求发送到 cloudfront(同一来源),并且在您的发行版中具有多个来源和行为。前任:
Beavior -> Origin
/api/* -> my.api.com
/static/* -> my.s3.bucket
Run Code Online (Sandbox Code Playgroud)
但如果您确实需要跨源请求,则 CORS 标头应由 cloudfront 转发并具有相同的行为,在您的示例中,您可能希望对允许的标头更加宽松(?<AllowedHeader>*</AllowedHeader>)。但这与浏览器行为的关系比 CLoudFront 或 S3 更相关。
| 归档时间: |
|
| 查看次数: |
3233 次 |
| 最近记录: |