Angularjs 带有签名cookie的AWS Cloudfront POST请求

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

我使用自定义策略向cloudfront发送带有签名cookie的POST请求时遇到问题

最近我换了域名。在此之前,GET和POST请求都运行良好。现在POST请求不起作用

我想我安排的每件事都和以前一样

具体情况是这样的

1.从获取对Cloudfront(域:)的请求仍然可以正常工作

2.我使用S3作为起点,直接将请求获取/发布到S3很好。没问题

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开发者工具中点击“replay XHR”时,POST请求可以很好地处理签名的cookie,并得到201个响应。这让我发疯。

我尝试了CURL和POSTMAN来测试POST请求,结果都如预期的那样成功。这不是Chrome浏览器的问题。在Safari和Firefox中也会发生同样的情况

  • 我正在为客户端应用程序使用AngularJS。我怀疑,但是直接向S3发送GET/POST请求是可以的。(并向Cloudfront获取请求) POST请求主体和cookie如下所示。
  • AmazonS3CORS如下所示

    <?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>