2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Rails】rack-corsで複数サブドメインからAPIリクエスト時のCORSエラーを回避する

Posted at

別Originからリクエストを受けるときはCORS対応が必要

他OriginからAPIサーバへのリクエストを許可したいとき、CORSを意識する必要があります。
1つだけであればAccess-Control-Allow-OriginヘッダにそのOriginを設定すれば良いです。

しかし、Access-Control-Allow-Originヘッダには一つのOriginしか設定できません。

<origin>
オリジンを指定します。1つのオリジンだけを指定することができます。
サーバーが複数のオリジンからのクライアントに対応している場合、リクエストを行った特定のクライアントのオリジンを返さなければなりません。

複数のOriginに対応する場合、リクエスト元のOriginをもとにAccess-Control-Allow-Originヘッダを設定する必要があります。

rack-corsで複数Originからのリクエスト許可設定

Railsの場合はrack-corsを使用すると楽に実装できます。
許可Originに正規表現を使って設定できるので、特定のドメイン配下のサブドメイン全部でもなんでも設定できます。

以下、example.comのOriginから /api/配下のパスへのリクエストを許可する設定例です。

config/initializers/rack_cors.rb
use Rack::Cors do
  allow do
    origins /\Ahttps:\/\/.*.example.com\z/

    resource(
      '/api/*',
      headers: :any,
      methods: [:get, :post, :delete, :put, :patch, :options, :head],
    )
  end
end

rack-corsのREADMEにも書かれていますが、正規表現の設定に不備があるとセキュリティリスクになるのでくれぐれも慎重に。。

参考

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?