Конфигурация Elastic Beanstalk CORS для пост-запроса

Я получаю следующую ошибку при отправке почтового запроса с моего локального хоста:

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

Но в редакторе конфигурации CORS для моего экземпляра S3 у меня есть следующее:

<?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>

I've played around with these three lines, but I'm still unable to diagnose the problem.

    <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 в файл web.xml моего кота, и все работало нормально, поэтому я думаю, что неправильно настраиваю свой эластичный бобовый стебель.

РЕДАКТИРОВАТЬ

Добавлен следующий файл .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

Я повторно развернул войну, но у меня все еще есть та же ошибка: «Нет заголовка «Access-Control-Allow-Origin»».

РЕШЕНИЕ

Никаких файлов .ebextensions не требовалось. Мне просто нужно было добавить фильтры CORS в файл web.xml, как это было в файле 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>

person David Streid    schedule 21.04.2017    source источник
comment
Как я могу получить доступ к файлу web.xml и отредактировать его? Спасибо!   -  person kashgo    schedule 24.09.2020


Ответы (1)


Я мало что знаю об AWS EB, но если предположить, что перед tomcat есть обратный прокси-сервер apache, похоже, вы можете использовать ebextensions и добавить туда информацию заголовка CORS. Посмотри это:

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

а также

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

person Chris D'Englere    schedule 21.04.2017
comment
Спасибо. Я попытался добавить файл конфигурации cors, но у меня все еще возникает та же проблема. - person David Streid; 21.04.2017
comment
Попробуйте изменить расширение файла на .config (удалить .yaml) в соответствии с документацией: docs.aws.amazon.com/elasticbeanstalk/latest/dg/ Затем выполните повторное развертывание. - person Chris D'Englere; 21.04.2017
comment
Кроме того, внимательно проверьте отступы в вашем файле yaml. Судя по тому, что вы вставили выше, похоже, что в нем не хватает отступа. - person Chris D'Englere; 21.04.2017
comment
Спасибо. Я изменил расширение и добавил правильный отступ, но все равно возвращал ту же ошибку. Простое добавление фильтров CORS в файл web.xml решило проблему. - person David Streid; 22.04.2017