22
23

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 5 years have passed since last update.

Sinatraとajax通信でクロスドメイン制約の突破方法

Posted at

##はじめに

クロスドメイン制約とは、クライアントとサーバのドメインが異なると通信ができない制約のこと。

↓ブラウザをlocalhost、Sinatraをlocalhost:4567において通信した時のエラー。

[Error] XMLHttpRequest cannot load http://localhost:4567. 
Origin http://localhost is not allowed by Access-Control-Allow-Origin.

ではどうすればよいのか?

##解決方法

  1. クライアントと同一ドメインにサーバから経由させるスクリプトを設置 (参考 http://routesfate.blog80.fc2.com/blog-entry-218.html)
  2. JSONPを使う (参考 http://gihyo.jp/dev/serial/01/crossbrowser-javascript/0011)
  3. ヘッダーを書き換える(参考 http://d.hatena.ne.jp/yuya_lush/20110628/1309280632)
  4. (誰かの遺産を使う)

大体上記の3(+1)つになると思う。

PHPerなら1で解決するのもありかと。GETしかしないならJSONPもあり。
基本的にはヘッダーを書き換えると思う。

ところで、今回薦めるのは4番。なんとなくSinatraでいいgemはないかとぐぐっていたところ、よさげなのを発見した。

その名も 「sinatora-cross_origin」
公式サイト: https://github.com/britg/sinatra-cross_origin

12,944ダウンロードを達成してるので、割と人気あるっぽい。
日本語の記事がぱっと見無かったから紹介してみた。

##sinatra-cross_originの使い方

qiita.rb
require 'sinatra'
require 'sinatra/cross_origin'
enable :cross_origin
get '/hi' do
  cross_origin
  "Hello World!"
end

超簡単。おそらくヘッダーを書き換えてるんだと思う。
他にもメソッド毎に細かく調整できたりするので、そこら辺は公式参照。

みんな大好きSinatra!

22
23
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
22
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?