Cloudfront从一个域拒绝CORS,但不拒绝另一个域

时间:2013-02-11 14:45:32

标签: ajax cors amazon-cloudfront

我有一个Heroku应用程序通过JQuery向我的cloudfront发行版发出AJAX请求。当我从myapp.herokuapp.com加载我的网站时,一切都很完美。

当我从我的自定义域(类似myapp.subdomain.domain.com)访问该应用时,我明白这一点:

XMLHttpRequest cannot load [cloudfront dist here]/something.json. Origin http://myapp.subdomain.domain.com is not allowed by Access-Control-Allow-Origin.

这很奇怪。在我的S3 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>
        <AllowedHeader>Authorization</AllowedHeader>
    </CORSRule>
</CORSConfiguration>

为什么会这样?有什么想法吗?

1 个答案:

答案 0 :(得分:4)

您可能会被这个S3 / CloudFront错误https://forums.aws.amazon.com/thread.jspa?messageID=377513

所困扰

当S3看到来自myapp.herokuapp.com的请求时,它会重写Access-Control-Allow-Origin: myapp.herokuapp.com,而不是您期望的*。并且CF缓存了这一点。因此,即使使用相同的CF分发,来自不同域的辅助请求也将无法通过CORS验证。