如何在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