【CORS】gem rack-corsとクロスオリジンについて


はじめに

gem grapeでAPIを作成する際に、色々な記事に書いてあったCORSについて調べ、学んだのでまとめておく。

CORS (Cross-Origin Resource Sharing)

オリジンというものがあり、それを(Cross)またいで情報を共有すること。

オリジンって?

リソース自身のURLの「スキーム」「ホスト」「ポート」の3つの組み合わせを「オリジン」という。

http://example.com:8080
このオリジンの場合、

http スキーム
example.com ホスト
:8080 ポート

これらのどこかが違うと、異なるオリジンということになる。

nslookupコマンド

これは、ドメイン名からIPアドレスを調べたり,その逆にIPアドレスからドメイン名を調べたりするときに使うコマンドで、

nslookup http://example.com:8080

などとして、ドメイン名からコンピューターが通信時に使用するIPアドレスを検索する(名前解決という)した際に、異なるIPアドレスである場合は、クロスオリジンと言える。

この異なるIPアドレス同士がリクエストを送ることをクロスオリジンと言う。

gem rack-cors

これはgrape等でAPIを作成した際に、他のオリジンからのアクセスを制御する設定を行うもので、gemを追加しbundle installconfig/application.rbに簡単な設定を追加するだけですぐに使える。
こちらを確認し、以下のように設定する。

config/application.rb
module app_name
  class Application < Rails::Application
    config.middleware.insert_before 0, Rack::Cors do
      allow do
        origins '*'
        resource '*', headers: :any, methods: [:get, :post, :options]
      end
    end
  end
end

こちらのorigins等の"*" というのは、全部、という意味で、この場合は他のすべてのオリジンからのアクセスを許可している事になる。

逆に、本番環境時にここに、自分のドメイン名を入れたりする事で、
他のサイトから自分の作ったAPIが参照出来なくなったり、という制御が可能になる。

参考にさせて頂いた記事

終わりに。

最後まで読んで頂きありがとうございます
転職の為、未経験の状態からRailsを学習しております。正しい知識を着実に身に着け、実力のあるエンジニアになりたいと考えています。継続して投稿していく中で、その為のインプットも必然的に増え、成長に繋がるかと考えています。
今現在、初心者だからといって言い訳はできないですが、投稿の内容に間違っているところや、付け加えるべきところが多々あるかと思いますので、ご指摘頂けると幸いです。この記事を読んで下さりありがとうございました。