Как установить доступа по контролю-авостово-авостоколу в Webrick Under Rails?

StackOverflow https://stackoverflow.com/questions/2535454

Вопрос

Я написал небольшое приложение 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top