34

別のドメインから動作するxmlhttprequestsを介して別のサイトにコンテンツを提供する小さなレールアプリを作成しました(同じサーバーで実行することはできません)。要求元の Web ページがこの資料にアクセスできるようにするには、Rails サーバーで access-control-allow-origin を設定する必要があることを理解しています。

Apache でこれを行う方法についてはかなり詳しく文書化されているようで、これはおそらく、サイトをデプロイした後に使用するサーバーです。私が開発している間は、Rails で慣れているように webrick を使用したいと思っています。レール内で適切な http ヘッダーを提供するように webrick を構成する方法はありますか?

4

7 に答える 7

78

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' => '*'
})
于 2013-07-23T16:15:21.900 に答える
14

レール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
于 2013-02-06T13:20:31.953 に答える
14

Rails 2 を使用している場合は、これをアプリケーション コントローラーに追加するだけです。

before_filter :set_access

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

明らかに"*"、もう少しオープンなものに変更することは良い考えです。

于 2011-01-03T11:58:04.113 に答える
12

Rails 3.1 - コントローラー after_filter を使用してもうまくいかなかったので、代わりにカスタム ミドルウェアを追加しました。

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

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
于 2013-10-27T19:07:37.507 に答える
8

レール 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
于 2011-03-28T10:33:03.537 に答える
6

Rack ミドルウェア gem としてソリューションが必要な場合: https://github.com/cyu/rack-cors

于 2014-02-14T18:11:33.710 に答える