我怀疑为我的应用程序提供服务的后端非常重要,但是如果你关心,我会使用带有Rails 4.0应用程序的机架.
使用jQuery,我向我的应用程序PATCH
发送如下请求:
$.ajax({ url: "http://example.com/whatever", type: "PATCH", data: { something: "something else" } })
当我从Chrome触发此来电时,我看到一个成功的OPTIONS
请求,我会从服务器返回这些标题:
Access-Control-Allow-Credentials:true Access-Control-Allow-Headers:accept, content-type Access-Control-Allow-Methods:GET, PUT, PATCH, OPTIONS Access-Control-Allow-Origin: http://sending-app.localhost:3000 Access-Control-Expose-Headers: Access-Control-Max-Age:15
然后我看到一个PATCH
请求出去,这引发了这个错误:
XMLHttpRequest无法加载http://example.com/whatever.请求的资源上不存在"Access-Control-Allow-Origin"标头.因此不允许来源' http://sending-app.localhost:3000 '访问.
我尝试过切换PATCH
到PUT
相同的结果.
这对我没有任何意义.这是怎么回事?
我认为标题告诉整个故事,但由于人们感到困惑,这是我的config/application.rb
文件,这是Rails的rack-cors插件的配置方式:
config.middleware.use Rack::Cors do allow do origins '*' resource '*', :headers => :any, :methods => [:get, :put, :patch, :options], :max_age => 15 end end
brandonhilke.. 7
在操作中排除Rails CSRF检查;)
也就是说,Rails使用更新/创建请求检查真实性令牌.在您的Rails应用程序中,此令牌将添加到您的所有表单中.但是对于javascript请求,包括它是棘手的.
您可以通过将其添加到控制器来跳过检查操作:
skip_before_filter :verify_authenticity_token, :only => [:update]
顺便说一句,您的问题与CORS无关,您在浏览器中收到错误的错误消息.Rails日志讲述了真实的故事.
在操作中排除Rails CSRF检查;)
也就是说,Rails使用更新/创建请求检查真实性令牌.在您的Rails应用程序中,此令牌将添加到您的所有表单中.但是对于javascript请求,包括它是棘手的.
您可以通过将其添加到控制器来跳过检查操作:
skip_before_filter :verify_authenticity_token, :only => [:update]
顺便说一句,您的问题与CORS无关,您在浏览器中收到错误的错误消息.Rails日志讲述了真实的故事.