#javascript #ruby-on-rails #ruby-on-rails-3 #jsonp
#javascript #ruby-on-rails #ruby-on-rails-3 #jsonp
Вопрос:
Я использую стороннюю клиентскую библиотеку JavaScript, которая использует jQuery для отправки запросов JSONP. Запросы помечаются X-CSRF-Token, но Google Chrome блокирует их, говоря
XMLHttpRequest cannot load [...]. Request header field X-CSRF-Token is not allowed by Access-Control-Allow-Headers.
Как мне заставить Rails 3.1 не добавлять X-CSRF-Token к моим запросам, которые отправляются третьей стороне?
Ответ №1:
У меня только что возникла эта проблема. Эта ошибка фактически исправлена в текущей версии jquery-rails для разработки.
То, что там происходит, связано с функцией CSRFProtect помощников rails, которая добавляет этот заголовок к каждому запросу ajax, но это не имеет смысла для междоменного. Начиная с jQuery 1.5, вы можете добавить crossDomain
опцию в конфигурацию ajax, чтобы заставить запросы считаться междоменными, и текущая версия jquery-rails здесь это исправляет.
Теперь есть два способа установить параметр crossDomain:
- Если вы создаете форму или ссылку, вы можете добавить, соответственно,
:html => {'data-cross-domain' => true}
или'data-cross-domain' => true
(см. исходный код) - Если вы используете
$.ajax
функцию raw, то просто не забудьте добавитьcrossDomain: true
в параметры.
TL; DR обновите jquery_rails до последней версии (т. е. текущей версии разработчика в github) и запомните параметр crossDomain.