【发布时间】:2015-09-20 16:12:13
【问题描述】:
我在使用自定义策略使用签名 cookie 向云端发送 POST 请求时遇到问题。
最近我更改了域。在此之前,GET 和 POST 请求都运行良好。现在 POST 请求不起作用。
我想我设置的一切都和以前一样。
具体情况是这样的。
1.GET 请求从https://myexampledomain.com 到 Cloudfront(域:https://cdn.myexampledomain.com)仍然可以正常工作。
2.我使用 S3 作为源,直接对 S3 的 GET/POST 请求可以正常工作。没有 CORS 问题。
3.但是,对 Cloudfront 的预检请求失败。
我在控制台中遇到了这个错误。
No 'Access-Control-Allow-Origin' header is present on the requested
resource. Origin 'https://myexampledomain.com is therefore not allowed
access. The response had HTTP status code 403.
更有趣的是,当我在 Chrome 开发人员工具中单击“重放 XHR”时,POST 请求与签名的 Cookie 一起工作,并获得 201 Created 响应。这让我抓狂。
我尝试了 CURL 和 POSTMAN 来测试 POST 请求,并且都按预期成功运行。这不是 Chrome 浏览器的问题。 Safari、Firefox 也是如此。
- 我正在将 AngularJS 用于客户端应用程序。我怀疑有角度,但直接对 S3 的 GET/POST 请求很好。 (以及对 Cloudfront 的 GET 请求) POST 请求正文和 cookie 是这样的。
Amazon S3 CORS 如下所示。
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>https://myexampledomain.com</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>DELETE</AllowedMethod>
<AllowedMethod>HEAD</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
这是我的自定义政策。 expireTime 设置正确。
{
"Statement": [
{
"Condition":{
"DateLessThan":{"AWS:EpochTime":expireTime}
}
}
]
}
和云端行为设置
我花了两天时间来解决这个问题。任何小的帮助将不胜感激。
【问题讨论】:
-
Cloudfront 指的是存储桶,我想。当您将
allowedheader设置为*时会发生什么? -
@Jorg 你是指哪个allowedheader?
-
另一个想法...控制台显示
http://monad...。这不是 https,根据云端https only的设置。我的想法不多了,我觉得大部分都还可以。 -
@Jorg。这只是我的本地主机名称。我要把它改成真正的错误
-
您有任何可能的解决方案吗?如果是,请添加答案。
标签: angularjs cookies amazon-s3 cors amazon-cloudfront