如何让Rails 3.1不将X-CSRF-Token添加到我转发给第三方的JSONP请求?

时间:2011-05-18 18:51:21

标签: 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 个答案:

答案 0 :(得分:2)

我刚遇到这个问题。这个bug实际上是在jquery-rails的当前开发版本中修复的。

由于CSRFProtect function的rails帮助程序发生了什么,它将该标头添加到每个ajax请求中,但它对跨域没有意义。从jQuery 1.5开始,您可以在ajax配置中添加crossDomain选项以强制将请求视为跨域,并且当前版本的jquery-rails修复了here

现在,有两种方法可以设置crossDomain选项:

  • 如果您要构建表单或链接,可以分别添加:html => {'data-cross-domain' => true}'data-cross-domain' => true(参见the source
  • 如果您使用原始$.ajax功能,则只需记住将crossDomain: true添加到选项中。

TL; DR 升级到jquery_rails的最新版本(即github中的当前开发版本)并记住crossDomain选项。