2017-04-21 56 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文件中的縮進。看起來它基於上面粘貼的內容缺少了很多縮進。 –