Pregunta

He escrito una pequeña aplicación rieles para servir contenido a otro sitio a través de XMLHttpRequests que vayan a actuar de otro dominio (que no será posible hacerlo funcionar en el mismo servidor). Entiendo que necesitaré conjunto de control de acceso permitirá origen en mi servidor de carriles para permitir que la página Web que solicita el acceso a este material.

Parece bastante bien documentado cómo hacer esto con Apache y este es probablemente el servidor Voy a utilizar una vez que implementa el sitio. Mientras que estoy desarrollando aunque espero que sólo tiene que utilizar WEBrick ya que estoy acostumbrado a hacerlo con los carriles. ¿Hay una manera de configurar WEBrick para proporcionar la adecuada http cabecera dentro de los carriles?

¿Fue útil?

Solución

Si usted está en los carriles 2 sólo tiene que añadir esto a su controlador de aplicación.

before_filter :set_access

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

Es evidente que el cambio de "*" a algo un poco menos abierta sería una buena idea.

Otros consejos

Carriles 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' => '*'
})

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

Barras de 3,1 - utilizando un controlador after_filter no funcionó para mí por lo que añade un middleware personalizado en lugar:

En 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 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

En caso de que quiera la solución como una joya en rack middleware: https://github.com/cyu/rack-cors

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top