Как установить доступа по контролю-авостово-авостоколу в Webrick Under Rails?
-
22-09-2019 - |
Вопрос
Я написал небольшое приложение Rails для обслуживания контента на другой сайт через Xmlhttprequests, которое будет работать из другого домена (их невозможно запустить на том же сервере). Я понимаю, что мне нужно будет установить на мой сервер Rails, чтобы позволить запрашивающей веб-странице, чтобы получить доступ к этому материалу.
Кажется довольно хорошо задокументированным, как это сделать с помощью Apache, и это, вероятно, сервер, который я буду использовать, когда развернут сайт. Хотя я развиваю, хотя я надеюсь просто использовать Webrick, так как привык делать с Rails. Есть ли способ настройки Webrick, чтобы обеспечить соответствующий заголовок HTTP в рельсах?
Решение
Если вы на Rails 2, просто добавьте это в свое приложение Contoller.
before_filter :set_access
def set_access
@response.headers["Access-Control-Allow-Origin"] = "*"
end
Очевидно меняется "*"
Что -то немного менее открыто было бы хорошей идеей.
Другие советы
Rails 4 (http://edgeguides.rubyonrails.org/security.html#default headers)
В config/application.rb:
config.action_dispatch.default_headers.merge!({
'Access-Control-Allow-Origin' => '*',
'Access-Control-Request-Method' => '*'
})
Рельсы 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 - Использование контроллера After_filter не сработала для меня, поэтому я добавил специальное промежуточное программное обеспечение:
В приложении/промежуточное ПО/CORS_MIDDLEARWARE.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
В 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
Рельсы 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
Если вы хотите решение в качестве драгоценного камня промежуточного программного обеспечения:https://github.com/cyu/rack-cors