Rails CORS - izudon/izudon.github.io GitHub Wiki
結論
rack-cors という gem の導入で簡単に実現できる。
(以下そのマニュアルから抜粋&日本語化)
設定ファイル 書き方
# config/initializers/cors.rb
Rails.application.config.middleware.insert_before 0, Rack::Cors do
allow do
origins 'localhost:3000', '127.0.0.1:3000',
/\Ahttp:\/\/192\.168\.0\.\d{1,3}(:\d+)?\z/
# regular expressions can be used here
resource '/file/list_all/', :headers => 'x-domain-token'
resource '/file/at/*',
methods: [:get, :post, :delete, :put, :patch, :options, :head],
headers: 'x-domain-token',
expose: ['Some-Custom-Response-Header'],
max_age: 600
# headers to expose
end
allow do
origins '*'
resource '/public/*', headers: :any, methods: :get
# Only allow a request for a specific host
resource '/api/v1/*',
headers: :any,
methods: :get,
if: proc { |env| env['HTTP_HOST'] == 'api.example.com' }
end
end
- 「この
origins から」「この resource に対して」
アクセスがあったものは「通す(許可する)」・・・と読む。
origins
origins には、「文字列」または「正規表現」または「*」が指定できる。
, で区切りながら 複数 指定できる。
- プロトコル(
http や https)+ サーバ + ポート番号
の組み合わせのことを「オリジン」という。
アクセス可否はこの「オリジン」ごとに定められる。
resource
- URLにおけるポート名から先の「パスの部分」を書く。
* をワイルドカードとして使用できる。
- ひとつの
origins に対して 複数 の resource を書ける。
:methods :headers などで、許可するものをさらに細かく指定できる。
:methods ・・・ 文字列 または 配列 または :any
:get [:get, :head] のように、許可するメソッドだけを書く。
(:any ですべて許可 )
- これ自体を指定しないと・・・
- 単純な
GET なら許可されるが DELETE は許可されない、
といったような、不可思議な動きとなったので、
全許可なら :any を指定した方が無難。
:headers ・・・ 文字列 または 配列 または :any
'x-domain-token' など、リクエストに含まれて良いヘッダを描く。
:expose