技術

【Rails】パッと簡単クロスドメイン対応

投稿日:

どうも、中田です。

最近専らRailsでは画面を作るというより、APIを作るということが多くなってきたので、
クロスドメイン対応を随時入れています。

パッとやるためにメモ残し。

とりあえずこれやっとけ備忘録

Gem

Gemfileにこれを追加します。

gem 'rack-cors', :require => 'rack/cors', group: [:development, :test]
config

development.rbにこれを追加します。

config.middleware.insert_before ActionDispatch::Static, Rack::Cors do
  allow do
    origins '*'
    resource '*', :headers => :any, :methods => [:get, :put, :post, :delete]
  end
end

bundle install

これで桶。

そもそもクロスドメイン?

AjaxでAPIを呼び出す際、クロスドメイン制約というのがあります。
要は 「知らないところから、API呼び出さないでくださいよ」制約です。
知らないところかどうかは、スキーマ、ホスト、ポートが全て同じかという条件で判断します。

http://api.cotegg.com:80

スキーマ:http
ホスト:api.cotegg.com
ポート:80

これが全部同じところからのAPI呼出でないとダメだよというものです。

最近よく、Bootstrapで画面作ってAngularJSでデータ取得、取得先はrailsなんて構成でやってるので

画面側は、http://localhost:80
API側は、http://localhost:3000

なんて感じになります。

画面側からAPI呼び出そうとすると見事にクロスドメイン制約に引っかかっちゃう訳ですよね。
http://localhost:80なんて知らないところだ!という何とも冷たいあしらひ。。。
プログラムの世界はシビアでありんす。

クロスドメイン突破するようなjqueryがあったりするけど、それはそれ。

-技術
-

執筆者:


comment

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください。

関連記事

[Bitbucket] fatal: Could not read from remote repository.

どうも中田です こないだリモートリポジトリにPushできないんすけど〜という話を …

no image

【Grunt】楽々デプロイ(grunt-rsync)

どうも、中田です。 gruntでアプリをデプロイするときにどうやったらいいかぁ〜 …

[Xcode]Provisioning Profileの中身を確認する方法

こんにちは。たなかです。 以前『[Xcode]Provisioning Prof …

no image

【ionic】タブをタップで最上部にスクロール!

どうも、中田です。 今日はタブをタップでトップにゴーの日です。 どういう日かとい …

no image

こんにちは。コーテッグの小山です。 以前リアクティブフォームのHTML側の記述と …