2017-04-21 58 views
0

我提交从我的本地POST请求时收到以下错误 -弹性魔豆CORS的配置POST请求

XMLHttpRequest cannot load http://sample-env.elasticbeanstalk.com/resource 
Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. 
Origin 'http://localhost:8080' is therefore not allowed access 

但是,在我的S3实例的CORS配置编辑器,我有以下几点 -

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

我已经与这三条线玩耍了,但我仍然无法诊断问题。

<AllowedOrigin>*</AllowedOrigin> 
    <AllowedOrigin>http://*</AllowedOrigin> 
    <AllowedOrigin>https://*</AllowedOrigin> 

我的开发者控制台显示如下头,这让我觉得这个CORS配置甚至不被读取 -

HTTP/1.1 200 OK 
Date: Fri, 21 Apr 2017 02:48:01 GMT 
Server: Apache-Coyote/1.1 
Allow: GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS 
Content-Length: 0 
Keep-Alive: timeout=60, max=98 
Connection: Keep-Alive 
Content-Type: text/plain 

有谁看到什么毛病我的配置还是有别的东西,必须添加?我能够将CORS过滤器添加到我的tomcat的web.xml中,并且一切正常,所以我认为我正确配置了我的弹性beanstalk。

编辑

添加了以下config文件(前身,.yaml)

add_cors.config.config

files: 
"/etc/httpd/conf.d/cors.conf" : 
    mode: "000644" 
    owner: root 
    group: root 
    content: | 
     <Location "/"> 
      Header set Access-Control-Allow-Origin: * 
      Header set Access-Control-Allow-Methods: "POST, GET, PUT, DELETE, OPTIONS" 
      Header add Access-Control-Allow-Headers: "Authorization, Content-Type, Accept" 
      Header set Access-Control-Allow-Credentials: true 

      SetOutputFilter DEFLATE 
     </Location> 

它是在爆炸战争这个位置 -

. 
├── app.war 
├── .ebextensions 
│   ├── add_cors.config.yaml 
├── META-INF 
│   ├── … 
└── WEB-INF 
    ├── classes 
    │   └── … 
    ├── servlet.xml 
    ├── lib 
    │   ├── … 
    └── web.xml 

我重新部署了这场战争,但我仍然有同样的错误 - “不”Acc ESS-控制允许来源标头是本”

SOLUTION

否.ebextensions文件是必要的。我只是需要在CORS筛选器添加到web.xml就像我在我的tomcat的conf/web.xml中有

<!-- ================== CORS FILTERS ===================== --> 
    <filter> 
    <filter-name>CorsFilter</filter-name> 
    <filter-class>org.apache.catalina.filters.CorsFilter</filter-class> 
    <init-param> 
     <param-name>cors.allowed.origins</param-name> 
     <param-value>*</param-value> 
    </init-param> 
    <init-param> 
     <param-name>cors.allowed.methods</param-name> 
     <param-value>GET,POST,HEAD,OPTIONS</param-value> 
    </init-param> 
    <init-param> 
     <param-name>cors.allowed.headers</param-name> 
     <param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers</param-value> 
    </init-param> 
    <init-param> 
     <param-name>cors.exposed.headers</param-name> 
     <param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value> 
    </init-param> 
    <init-param> 
     <param-name>cors.support.credentials</param-name> 
     <param-value>true</param-value> 
    </init-param> 
    <init-param> 
     <param-name>cors.preflight.maxage</param-name> 
     <param-value>10</param-value> 
    </init-param> 
    </filter> 
    <filter-mapping> 
    <filter-name>CorsFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
    </filter-mapping> 

回答

1

我不知道很多关于AWS EB,但假设有在Apache反向代理它看起来像你可以使用ebextensions并在那里添加CORS头信息。看到这一点:

https://forums.aws.amazon.com/message.jspa?messageID=570570

http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers.html

+0

感谢。我尝试添加一个cors配置文件,但我仍然遇到同样的问题。 –

+0

尝试按照文档将文件扩展名更改为.config(删除.yaml): http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/ebextensions.html 然后重新部署。 –

+0

另外,请仔细检查yaml文件中的缩进。看起来它基于上面粘贴的内容缺少了很多缩进。 –