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