Это из документации Spine js
Интеграция CORs Rails
Давайте создадим метод cor, который добавит некоторые заголовки управления доступом для запроса к ответу на запрос.
Добавьте следующее в app / application_controller.rb:
before_filter :cor
def cor
headers["Access-Control-Allow-Origin"] = "js-app-origin.com"
headers["Access-Control-Allow-Methods"] = %w{GET POST PUT DELETE}.join(",")
headers["Access-Control-Allow-Headers"] = %w{Origin Accept Content-Type X-Requested-With X-CSRF-Token}.join(",")
head(:ok) if request.request_method == "OPTIONS"
end
Хотя Access-Control-Allow-Origin использует подстановочный знак, я настоятельно рекомендую его не использовать, так как он открывает ваше приложение для всевозможных CSRF-атак,Использование белого списка намного лучше и безопаснее.
Раздел Access-Control-Allow-Headers важен, особенно заголовок X-Requested-With.Rails не нравится, если вы отправляете запросы Ajax на него без этого заголовка, и игнорирует заголовок Accept запроса, возвращая HTML, когда он фактически должен возвращать JSON.
Стоит отметить, что jQuery не добавляет этозаголовок для кросс-доменных запросов по умолчанию.Это проблема, которую Spine решает внутренне, но если вы используете простой jQuery для COR, вам нужно будет указать заголовок вручную.
jQuery.ajaxSetup({
headers: {"X-Requested-With": "XMLHttpRequest"}
});
Некоторые браузеры сначала отправляют запрос параметров на сервер,чтобы убедиться, что установлены правильные заголовки доступа.Вам нужно поймать это в Rails, возвращая статус 200 с правильными заголовками.Для этого добавьте следующее в файл config / rout.rb вашего приложения:
match '*all' => 'application#cor', :constraints => {:method => 'OPTIONS'}
Вот и все, вы все настроены для перекрестных запросов с помощью Spine!