AWS控制台中的CORS配置无法正常工作

时间:2017-02-21 05:08:49

标签: javascript ajax amazon-web-services amazon-s3 cors

我有一些JavaScript尝试向AWS上托管的服务器上的RSS源发出ajax请求,我在发出请求时收到以下错误消息:

XMLHttpRequest cannot load http://www.domain.com/feed. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://xxx.compute.amazonaws.com' is therefore not allowed access.

我检查了请求标头,Origin标头就在那里。

然后,我更新了服务器上用于将ajax请求发送到的AWS桶的CORS配置:

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <CORSRule>
        <AllowedOrigin>http://xxx.compute.amazonaws.com</AllowedOrigin>
        <AllowedMethod>GET</AllowedMethod>
        <MaxAgeSeconds>3000</MaxAgeSeconds>
        <AllowedHeader>*</AllowedHeader>
    </CORSRule>
</CORSConfiguration>

我还尝试了上面的一些其他不同的变体,但它们似乎没有任何区别,我的浏览器仍然提供相同的CORS错误消息。当我安装Chrome扩展程序以禁用CORS保护时,代码运行正常,因此似乎只有CORS问题阻止它工作。

有谁知道为什么AWS中的存储桶的CORS配置不起作用,或者为什么配置可能出错?

我已经尝试了几天,但我找到的所有答案都是人们没有意识到你需要允许外部域的跨域共享,或者如何在AWS上配置CORS的基本教程但我正在关注那些确切的,似乎没有什么区别。

2 个答案:

答案 0 :(得分:2)

通过将以下内容添加到存储桶的CORS配置中,我能够解决此错误:

async vm.evtHTTPFactory.getData() {
  var myResp = await vm.evtHTTPFactory.getData()
  console.log(myResp)}

完整配置:

<AllowedMethod>HEAD</AllowedMethod>

答案 1 :(得分:0)

我无法使其适用于特定来源,这仍然是我需要研究的内容,但是以下配置可以满足我的需要。

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
    <AllowedOrigin>*</AllowedOrigin>
    <AllowedMethod>GET</AllowedMethod>
    <AllowedMethod>PUT</AllowedMethod>
    <AllowedMethod>POST</AllowedMethod>
    <MaxAgeSeconds>3000</MaxAgeSeconds>
    <AllowedHeader>Authorization</AllowedHeader>
</CORSRule>
</CORSConfiguration>