ruby-on-rails ajax http-headers xmlhttprequest webrick

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