別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/
配下のパスへのリクエストを許可する設定例です。
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にも書かれていますが、正規表現の設定に不備があるとセキュリティリスクになるのでくれぐれも慎重に。。
参考