Подтвердить что ты не робот

CORS включен в Apache, но AJAX не работает (хром говорит, что источник не разрешен)

Я пытаюсь заставить AJAX работать между двумя субдоменами.

rails.mydomain.com и mydomain.com

В apache, в/etc/apache2/sites-available/У меня есть файл rails.mydomain.com:

<VirtualHost *:80>
    Header add Access-Control-Allow-Origin "http://www.mydomain.com"
    Header add Access-Control-Allow-Origin "http://www.dev-mydomain.com"
</VirtualHost>

Однако, когда я пытаюсь выполнить простой запрос ajax-теста от http://www.dev-mydomain.com, в Chrome я получаю: "XMLHttpRequest не может загрузить http://rails.mydomain.com/directory. http://www.dev-mydomain.com не разрешено Access-Control-Allow-Origin.

Кто-нибудь знает, чего я не хватает?

4b9b3361

Ответ 1

Как указывает ссылка Dahazer, лучшим выбором является один заголовок Access-Control-Allow-Origin. Это определенно не подходит для производства, но вы можете просто откликнуть заголовок Origin, пока вы находитесь в режиме dev.

Если у вас все еще есть проблема, скорее всего, вы не установите достаточно заголовков CORS в ответе. По моему опыту выполнения кросс-домена ajax в chrome (не используя jquery mind), мне также нужно было установить следующий заголовок:

Access-Control-Allow-Headers : X-Requested-With,Content-Type

Учитывая, что я использовал HTTP-методы, отличные от POST и GET, мне также необходимо было установить

Access-Control-Allow-Methods : GET,PUT,POST,DELETE

Однако, прежде всего, я рекомендую прочитать учебник html5 CORS, в частности раздел CORS на сервере. Он должен дать вам представление о различных способах настройки CORS, будь то на сервере или на клиенте (в вашем случае параметры конфигурации jQuery ajax) на основе вашего конкретного варианта использования.

Ответ 2

Не могли бы вы попробовать это?

В Gemfile

gem "rack-cors", "~> 0.2.7"

В config/application.rb

config.middleware.use Rack::Cors do |requests|
  requests.allow do |allow|
    allow.origins '*'
    allow.resource '*', headers: :any, methods: [:get, :post, :put, :delete, :options]
  end
end

Не забудьте перезагрузить сервер. Тогда это должна быть работа.

Ответ 3

У меня была эта проблема в последнее время. Я установил Access-Control-Allow-Origin в * в Apache. Однако Chrome по-прежнему блокировал мои междоменные запросы, в то время как он отлично работал в Firefox.

Решение, которое работало для меня, заключалось в том, чтобы добавить заголовок Access-Control-Allow-Methods со значением OPTIONS, GET, POST. Проводя это здесь, в случае, если у кого-то будет такая же проблема в будущем, и ни одно из других решений не будет работать.

Ответ 4

Я использовал rack-cors для некоторого успеха, довольно просто добавить, когда вы делаете перекрестное происхождение ajax...

Ответ 5

Проблема может быть в 4 разных местах. Начните с определения <virthualhost. Во-первых, есть несколько модулей и настроек конфигурации, которые вам нужно, чтобы позволить вашему определению vhost реализовать эти параметры.

  • Убедитесь, что включен mod_headers
  • Убедитесь, что ваш основной конфигурационный файл apache имеет параметр AllowOverride, который позволяет вашим vhosts переопределять ваши настройки CORS по умолчанию.

После того, как вы сделали это, вы можете использовать параметр Access-Control-Allow-Origin при условии, что вы также используете директиву DocumentRoot

<VirtualHost *:80>
    DocumentRoot /server/path/to/site/root
    Header add Access-Control-Allow-Origin "mydomain.com"
    Header add Access-Control-Allow-Origin "dev-mydomain.com"
    Header set Access-Control-Allow-Methods "GET,POST,PUT,OPTIONS"
</VirtualHost>