如何在rails下设置webrick中的access-control-allow-origin?

我写了一个小的Rails应用程序,通过xmlhttprequests将内容提供给另一个站点,这些站点将在另一个域中运行(不可能让它们在同一台服务器上运行)。 我知道我需要在我的Rails服务器上设置访问控制允许来源,以允许请求的网页访问这个材料。

这似乎是相当不错的文件如何做到这一点与Apache,这可能是我将使用一旦我部署网站的服务器。 虽然我正在开发,但我希望只使用webrick,因为我习惯使用rails。 有没有一种方法来configurationwebrick在轨道内提供适当的http头?

如果您使用Rails 2,只需将其添加到您的应用程序控制器。

before_filter :set_access def set_access @response.headers["Access-Control-Allow-Origin"] = "*" end 

显然,将"*"改为不太开放的东西是一个好主意。

Rails 4( http://edgeguides.rubyonrails.org/security.html#default-headers

在config / application.rb中:

 config.action_dispatch.default_headers.merge!({ 'Access-Control-Allow-Origin' => '*', 'Access-Control-Request-Method' => '*' }) 

Rails 3.1

 class ApplicationController < ActionController::Base protect_from_forgery after_filter :set_access_control_headers def set_access_control_headers headers['Access-Control-Allow-Origin'] = '*' headers['Access-Control-Request-Method'] = '*' end end 

Rails 3.1 – 使用控制器after_filter没有为我工作,所以我添加了一个自定义的中间件:

在app / middleware / cors_middleware.rb中:

 # For icons to work in Firefox with CDN class CorsMiddleware def initialize(app) @app = app end def call(env) status, headers, body = @app.call(env) cors_headers = headers.merge({ 'Access-Control-Allow-Origin' => '*', 'Access-Control-Request-Method' => '*' }) [status, cors_headers, body] end end 

在config / application.rb中:

 require File.join(Rails.root, "app", "middleware", "cors_middleware") config.middleware.insert_before ActionDispatch::Static, CorsMiddleware # Need it early in the chain to work for assets 

Rails 2.3.8

 before_filter :allow_cross_domain_access def allow_cross_domain_access response.headers["Access-Control-Allow-Origin"] = "*" response.headers["Access-Control-Allow-Methods"] = "*" end 

如果你想要解决scheme作为一个机架中间件gem: https : //github.com/cyu/rack-cors