Domanda

Ho scritto un piccolo rotaie app per servire fino contenuto a un altro sito tramite XMLHttpRequests che sarà operativo da un altro dominio (non sarà possibile farli in esecuzione sullo stesso server). Capisco che sarà necessario impostare l'accesso-controllo-allow-origine sul mio server binari per consentire la pagina web richiesta per accedere a questo materiale.

Sembra abbastanza ben documentato come fare questo con Apache e questo è probabilmente il server userò una volta schiero il sito. Mentre sto sviluppando anche se spero di utilizzare solo webrick come sono abituato a fare con le rotaie. C'è un modo di configurare webrick per fornire l'intestazione http appropriato all'interno rotaie?

È stato utile?

Soluzione

Se siete on Rails 2 Basta aggiungere questo al vostro contoller applicazione.

before_filter :set_access

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

Ovviamente cambiando "*" a qualcosa di un po 'meno aperta sarebbe una buona idea.

Altri suggerimenti

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

In 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 - usando un controller after_filter non ha funzionato per me, così ho aggiunto un middleware personalizzato invece:

In 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

In 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

Nel caso in cui si desidera la soluzione come una gemma Rack middleware: https://github.com/cyu/rack-cors

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top