ruby on rails - ¿Cómo establecer access-control-allow-origin en webrick under rails?
ruby-on-rails ajax (6)
Si está en Rails 2, simplemente agregue esto al controlador de su aplicación.
before_filter :set_access
def set_access
@response.headers["Access-Control-Allow-Origin"] = "*"
end
Obviamente, cambiar "*"
a algo un poco menos abierto sería una buena idea.
He escrito una pequeña aplicación de rieles para publicar contenido en otro sitio a través de xmlhttprequests que operarán desde otro dominio (no será posible ejecutarlos en el mismo servidor). Entiendo que tendré que establecer access-control-allow-origin en mi servidor de rieles para permitir que la página web solicitante acceda a este material.
Parece bastante bien documentado cómo hacer esto con Apache y este es probablemente el servidor que usaré una vez que implemente el sitio. Mientras desarrollo, espero usar webrick como acostumbro hacer con los rieles. ¿Hay alguna forma de configurar webrick para proporcionar el encabezado http apropiado dentro de los rieles?
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
Rieles 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: usar un controlador after_filter no me funcionaba, así que agregué un middleware personalizado en su lugar:
En la aplicación / 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
En 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 4 ( http://edgeguides.rubyonrails.org/security.html#default-headers )
En config / application.rb:
config.action_dispatch.default_headers.merge!({
''Access-Control-Allow-Origin'' => ''*'',
''Access-Control-Request-Method'' => ''*''
})
En caso de que quiera la solución como una gema de middleware Rack: https://github.com/cyu/rack-cors