我没有想法。我为在学校使用它的朋友制作了一个小应用程序。只要它在非学校互联网上,它工作正常。但是,在学校,有两个按钮不起作用。他们都向不同的控制器发出ajax请求。它们提供no access-control-allow-origin标头错误。我已经尝试了所有可以找到的修复方法,但没有任何方法可行。我没有想法。当前的迭代涉及到我在下面的rack-cors gem。我也试过修复 CORS issue: Getting error "No 'Access-Control-Allow-Origin' header is present" when it actually is,XMLHttpRequest No 'Access-Control-Allow-Origin' header is present on the requested resource,http://www.yihangho.com/rails-cross-origin-resource-sharing/和http://leopard.in.ua/2012/07/08/using-cors-with-rails/。还有什么我可以做的吗?
config.ru
require 'rack/cors'
use Rack::Cors do
allow do
origins '*'
resource '*',
:headers => :any,
:methods => [:get, :post, :delete, :put, :options, :patch]
end
end
application.rb中
config.middleware.insert_before 0, "Rack::Cors" do
allow do
origins '*'
resource '*', headers: :any, methods: [:get, :post, :patch, :options, :put]
end
end
答案 0 :(得分:0)
CORS旨在防止跨域XML请求。
我不确定具体原因,但缺点是,如果您尝试使用Ajax命中外部域(未授予CORS权限),则会被拒绝。
只要它在非学校互联网上,它就可以正常使用
是的,因为"域"将被视为"本地" 对不起,我误解为" Intranet"。
这取决于您正在访问的服务器 - 您需要确保服务器已启用CORS。
我之前已经处理过类似的问题。
您使用rack-cors
完成了正确的事情:
#config/application.rb
config.middleware.insert_before 0, "Rack::Cors" do
allow do
origins '*' #-> has to be "*" or specific
resource '*', headers: :any, methods: [:get, :post, :options]
end
end
如果您正在使用此功能(请记住,您必须重新启动服务器才能使其正常工作),应该工作。
CORS的主要考虑因素是origin
和resource
- 它们必须是" *" (全部),或明确定义(IE google.com
或其他)。
在你的情况下,允许他们"所有"应该可以测试 - 然后你需要确保你定义了特定的域名。