Frage

Ich habe eine kleine Rails -App geschrieben, um Inhalte über XMLHTTPrequests auf einer anderen Website zu servieren, die von einer anderen Domäne aus operiert werden (es ist nicht möglich, sie auf demselben Server zum Laufen zu bringen). Ich verstehe, dass ich auf meinem Rails-Server Access-Control-Allow-Origin-Ursprung festlegen muss, damit die Anforderungswebseite auf dieses Material zugreifen kann.

Es scheint ziemlich gut dokumentiert zu sein, wie das mit Apache geht, und dies ist wahrscheinlich der Server, den ich verwenden werde, sobald ich die Site bereitstellt. Während ich mich entwickle, hoffe ich, dass ich nur Webrick benutze, wie ich es mit Schienen gewohnt bin. Gibt es eine Möglichkeit, Webrick zu konfigurieren, um den entsprechenden HTTP -Header innerhalb von Schienen bereitzustellen?

War es hilfreich?

Lösung

Wenn Sie auf Rails 2 sind, fügen Sie dies einfach zu Ihrem Bewerbungscontoller hinzu.

before_filter :set_access

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

Offensichtlich verändern "*" Für etwas weniger offenes wäre eine gute Idee.

Andere Tipps

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

Schienen 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 - Verwenden eines Controllers After_filter hat bei mir nicht funktioniert, daher habe ich stattdessen eine benutzerdefinierte Middleware hinzugefügt:

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

Falls Sie die Lösung als Rack Middleware -Juwel wünschen:https://github.com/cyu/rack-cors

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top