Angularjs 带有签名cookie的AWS Cloudfront POST请求
我使用自定义策略向cloudfront发送带有签名cookie的POST请求时遇到问题 最近我换了域名。在此之前,GET和POST请求都运行良好。现在POST请求不起作用 我想我安排的每件事都和以前一样 具体情况是这样的 1.从获取对Cloudfront(域:)的请求仍然可以正常工作 2.我使用S3作为起点,直接将请求获取/发布到S3很好。没问题 3.但是,对Cloudfront的飞行前请求失败 我在控制台中得到了这个错误Angularjs 带有签名cookie的AWS Cloudfront POST请求,angularjs,cookies,amazon-s3,cors,amazon-cloudfront,Angularjs,Cookies,Amazon S3,Cors,Amazon Cloudfront,我使用自定义策略向cloudfront发送带有签名cookie的POST请求时遇到问题 最近我换了域名。在此之前,GET和POST请求都运行良好。现在POST请求不起作用 我想我安排的每件事都和以前一样 具体情况是这样的 1.从获取对Cloudfront(域:)的请求仍然可以正常工作 2.我使用S3作为起点,直接将请求获取/发布到S3很好。没问题 3.但是,对Cloudfront的飞行前请求失败 我在控制台中得到了这个错误 No 'Access-Control-Allow-Origin' he
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开发者工具中点击“replay XHR”时,POST请求可以很好地处理签名的cookie,并得到201个响应。这让我发疯。
我尝试了CURL和POSTMAN来测试POST请求,结果都如预期的那样成功。这不是Chrome浏览器的问题。在Safari和Firefox中也会发生同样的情况
<?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>
云端行为设置
我花了两天时间解决这个问题。任何小小的帮助都将不胜感激 您可以在选项响应中看到没有设置CORS头。这应该是你的第一个指针 然后看看S3的配置,您会发现您并没有为OPTIONS请求设置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>
<AllowedMethod>OPTIONS</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
https://myexampledomain.com
得到
放
邮递
删除
头
选择权
3000
*
在您的屏幕截图上,您可以看到在cloudfront中,您已经启用了选项,所以它现在应该可以工作了
我重新应用到这一点,因为我有类似的问题与ng文件上传,不发送cookies与选项的方法,所以我的飞行前抛出错误,这是未经授权的。当您修复配置时,如果仍然出现错误,请发布,以便我知道问题可能出在哪里?我想Cloudfront指的是存储桶。当您将
allowedheader
设置为*
时会发生什么情况?@Jorg您指的是哪个allowedheader?另一个想法。。。控制台显示http://monad...
。根据cloudfront上的https only
设置,这不是https。“我的想法快用完了,大部分对我来说都没问题。”乔格。这只是我的本地主机名。我要把它改成真的你有什么可能的解决办法吗?如果是,请添加答案。我得到了这个错误。在CORS配置中找到不受支持的HTTP方法。不支持的方法是使用选项
<?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>
<AllowedMethod>OPTIONS</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>