5

我有以下 S3 存储桶: http: //my-bucket.s3-website-eu-west-1.amazonaws.com/

根据http://docs.amazonwebservices.com/AmazonS3/latest/dev/cors.html,我添加了一个 CORS 配置:

<CORSConfiguration>
 <CORSRule>
<AllowedHeader>x-requested-with</AllowedHeader>
 <AllowedHeader>*</AllowedHeader>
   <AllowedOrigin>*</AllowedOrigin>
   <AllowedMethod>POST</AllowedMethod>
    </CORSRule>
 <CORSRule>
   <AllowedOrigin>http://*.test.com</AllowedOrigin>
   <AllowedMethod>POST</AllowedMethod>
 </CORSRule>
</CORSConfiguration>

我使用 jquery 向我的存储桶发出 AJAX Post 请求(注意,来源是 jd.test.com:8000):

$.ajax('http://my-bucket.s3-website-eu-west-1.amazonaws.com/', {
    type: "POST",
    data: $(":hidden", self).serializeArray(),
    files: $(":file", self),
    statusCode: {
      204: function(){
        //do something
      }
    }
});

提出请求后,我的 chrome 控制台抱怨:

XMLHttpRequest cannot load http://my-bucket.s3-website-eu-west-1.amazonaws.com/. Origin http://www.jd.test.com:8000 is not allowed by Access-Control-Allow-Origin.

任何关于为什么没有发出 POST 请求的帮助将不胜感激。

谢谢 !

4

4 回答 4

2

您的 CORSConfiguration 必须包含端口号,因为端口号是源的一部分,请参见例如http://en.wikipedia.org/wiki/Same_origin_policy

于 2012-12-10T16:54:09.907 回答
2

我刚刚写了一个简单的教程,它使用 Rails,但它可以很容易地被翻译成任何其他服务器框架。
上传由很棒的jQuery 文件上传处理。并使用 cors 直接上传到 s3

于 2012-09-30T21:20:48.150 回答
1

我也将深入探讨这一点。您是否尝试将 AllowedMethod 更改为 PUT?文件上传是使用 PUT 而不是 POST 完成的。

- 编辑

傻我。我的 PUT 请求被禁止 403。POST 请求会给出 400 状态码。

于 2012-09-05T10:52:21.217 回答
1

我通过在 S3 存储桶上的 CORS 配置中将该AllowedHeader字段设置为来解决此问题。*

这是我完整的 CORS S3 配置:

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <CORSRule>
        <AllowedOrigin>*</AllowedOrigin>
        <AllowedMethod>POST</AllowedMethod>
        <MaxAgeSeconds>3000</MaxAgeSeconds>
        <AllowedHeader>*</AllowedHeader>
    </CORSRule>
</CORSConfiguration>
于 2013-10-24T16:21:40.220 回答