J'ai écrit un petit Rails application pour servir de contenu à un autre site via XMLHTTPQUESTS qui fonctionnera à partir d'un autre domaine (il ne sera pas possible de les obtenir en cours d'exécution sur le même serveur). Je comprends Je devrai définir une origine de contrôle d'accès-contrôle sur mon Rails Server pour permettre à la page Web demandeur d'accéder à ce matériau.
Il semble assez bien documenté comment faire cela avec Apache et c'est probablement le serveur que j'utiliserai une fois que je déploierai le site. Pendant que je me développe, j'espère simplement utiliser Webrick comme je suis habitué à faire avec des rails. Existe-t-il un moyen de configurer Webrick pour fournir l'en-tête HTTP approprié dans les rails?
Si vous êtes sur Rails 2, ajoutez simplement ceci à votre candidature à votre application.
before_filter :set_access
def set_access
@response.headers["Access-Control-Allow-Origin"] = "*"
end
Manifestement changeant "*"
à quelque chose d'un peu moins ouvert serait une bonne idée.
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 - L'utilisation d'un contrôleur après_filter n'a pas fonctionné pour moi, j'ai donc ajouté un middleware personnalisé à la place:
Dans l'application/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
Dans 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
Si vous souhaitez la solution en tant que piégeage de middleware rack: https://github.com/cyu/rack-cors