XHR не работает, потому что «Источник не разрешен Access-Control-Allow-Origin» - PullRequest
3 голосов
/ 30 октября 2010

Я работаю на API-сервере с Rails 3, который довольно удобен до сих пор, но я постоянно сталкиваюсь с ошибкой и не уверен, что это из-за моей установки Apache или приложения Rails.

Когда я пытаюсь выполнить HTTP-запрос DELETE или PUT на http://sample.domain/uri/id через XHR, curl или HTTP-Client.app Rails или Apache отвечает 404 или 403 (зависит от клиента. Iдумаю из-за cors) и консоль разработчика Safari отвечает

XMLHttpRequest cannot load http://sample.domain/uri/id. Origin http://web.client/ is not allowed by Access-Control-Allow-Origin.

Я использую mod_rack aka mod_rails на Apache2, и мой vhost фактически содержит это:

Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Methods POST,GET,DELETE,PUT,OPTIONS
Header set Access-Control-Allow-Headers X-Requested-With

Apache error_logотвечает со следующей ошибкой:

[Sat Oct 30 01:37:34 2010] [error] [client 22.222.222.22] client denied by server configuration: /path/to/rails/folder/public, referer: http://web.client/

Rails development.log отвечает с

Started OPTIONS "/uri/id" for 84.190.123.140 at 2010-10-30 03:18:42 +0200
ActionController::RoutingError (No route matches "/uri/id"):

И здесь я не уверен, почему вызов OPTIONS происходит, потому что я думал, что это будет толькоПредварительная проверка и, конечно, нет никакого маршрута для ОПЦИИ, потому что я хочу ответить на УДАЛИТЬ

Если у вас есть идеи, как решить эту проблему, пожалуйста, поделитесь ею со мной.

Спасибо большоемного Дэвид

Ответы [ 3 ]

1 голос
/ 29 июля 2015

В * nix системах вам необходимо сначала включить / включить модуль «Заголовки» в apache

sudo a2enmod headers

, затем вам нужно включить его в vhostследующая строка:

Набор заголовков Access-Control-Allow-Origin: "*"

0 голосов
/ 11 ноября 2012

Вам необходимо ответить на метод OPTIONS. Он отправляется до фактического метода DELETE, чтобы определить, разрешена ли отправка команды DELETE - известного как preflighting . Вы можете контролировать срок действия разрешений с помощью заголовка Access-Control-Max-Age .

В вашем ответе на OPTIONS вы отправляете Access-Control-Allow-Origin и т.д.

Представьте, если бы это было не так. Вы отправите ACAO после того, как вы уже удалили объект. Который может или не может быть разрешен.

Для исходного сервера часто лучше либо создать фактический белый список серверов, которые могут публиковать / удалять, либо повторно запрашивать доменное имя запрашивающего сервера. «*» По существу отключает CORS и открывает пользователю возможности для всех видов атак.

0 голосов
/ 01 декабря 2011

Это звучит как другая проблема.

Вы правильно делаете с заголовками для CORS. Что-то еще в вашей конфигурации Apache запрещает клиенту. Apache вообще не заботится о политике одного и того же происхождения, поэтому ваша ошибка «клиент отклонен из-за конфигурации сервера» будет вызвана неверной директивой Access или чем-то подобным.

Как и предполагалось, сначала убедитесь, что вы можете curl -X OPTIONS http://sample.domain/uri/id.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...