マルチドメインのXHRを許可する設定覚書

apacheとかで以下のような設定をすると、SameOriginPolicyの制約をぶっちぎってドメインを跨いだ通信が出来るみたい。

Header add Access-Control-Allow-Origin "*"

「*」を指定した場合はどんなドメインからでもどんとこいという感じ。
ただし複数指定は出来ないみたい。

また、Basic認証とか何らかの認証を噛ます場合、以下の設定も有効にする必要があるみたいです。

Header add Access-Control-Allow-Credentials "true"

しかしこの設定を有効にした場合、前述のAccess-Control-Allow-Originはワイルドカード指定を許可してくれません。
でもマルチドメインでアクセスしたい。詰んだ。
と思ったんですが以下のように設定するとマルチドメインでアクセスできました。

SetEnvIf Origin "^http(s)?://((.*\.)?tm8r\.com)$" accessConrtolAllowOrigin=$0
Header add Access-Control-Allow-Origin "%{accessConrtolAllowOrigin}e" env=accessConrtolAllowOrigin

レスポンスヘッダにはちゃんとアクセス元のドメインでAccess-Control-Allow-Originがついてる。

Access-Control-Allow-Origin:http://sub.tm8r.com

ちなみにXHRのリクエスト側もBasic認証通す場合はいくつか変更をしてやる必要があります。
通常以下のように記述しますが…

var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);

Basic認証通す場合は以下のように変更してやります。

var xhr = new XMLHttpRequest();
xhr.open('GET', url, true, "id", "pass");
xhr.withCredentials = "true";

ChromeはこれでいけたけどFirefoxがエラー出る…。なんぞ…。
完全に殴り書きなので気が向いたらまとめるかもしれない。

スポンサーリンク