DRYな備忘録

Don't Repeat Yourself.

【何ぞ?】Access-Control-Allow-Origin, クロスドメイン制約, 同一生成元ポリシーって何ぞ【XMLHttpRequest】【JavaScript】【Apache】

【問題】

anicatch.netというドメインで動いているウェブアプリでHTML+JavaScriptを生成してブラウザに返す。帰って来たJavaScriptの中において、XMLHttpRequestを用い、別ドメイン(今回は api.anicatch.netというドメイン)上で動いているAPIサーバのapiを叩きたい。

で、Access-Control-Allow-Originで許されてないよっ!的なブラウザのエラーを喰らいつづける。

JavaScript文書からapi.anicatch.netを叩いていいのはanicatch.netで生成されたものだけに制限したい。

【調査1】

Ajaxのクロスドメイン問題について

HTTP access control (CORS)

Access-Control-Allow-Origin試してみた。

jquery - Cross-Domain AJAX REST service HTTP Headers

http - Access-Control-Allow-Origin Multiple Origin Domains?

ajax - Error in chrome : Content-Type is not allowed by Access-Control-Allow-Headers

AjaxでAccess-Control-Allow-Originのエラーを回避する方法 

なるほど分からん

【解決】

APIサーバのOSがDebianなので、apachehttpd.confが/etc/apache2/httpd.confにあって、ここに以下のような二行を挿入

<Virtualhost *:80>
        (いろいろ略)
        ServerName api.anicatch.net
        <Directory>
                # 1.「送り側からContent-Typeを指定しちゃらめぇぇ」
                #    ていうエラーが出続けたので、これも許しちゃう
                Header set Access-Control-Allow-Headers "Content-Type"
                # 2. 本命はこっち
                Header set Access-Control-Allow-Origin "http://anicatch.net"
        </Directory>
</Virtualhost>

これをAPIサーバのアパッチの設定に追加することで、クロスドメインだけどanicatch.netからのhttpリクエストは許すようになっためでたしめでたし。あ、アパッチリスタートすんの忘れがち。

【調査2】

クロスドメイン制約とは、なんぞ

XMLHttpRequest のクロスドメインの制約についてまとめたφ(..)メモメモ

JavaScriptのセキュリティ問題と対策

というと、図にするとこんな感じ?

f:id:otiai10:20130404232253j:plain

で、

同一生成元ポリシーって何ぞ

同一生成元ポリシー (Same Origin Policy) と JSONP とは?

Mozilla Foundation セキュリティアドバイザリ

同一生成元ポリシー

HTTPとセッション管理、同一生成元ポリシーがセキュリティの基礎

なるほどなるほど。

あるドメインAで生成された処理系(この場合JavaScript)は、別ドメインとは隔絶して動くべきだろう、と。気持ちは分かる。

で、生成元情報ってのは文書の中でどういう形で存在してんの?

RFC6454 The Web Origin Concept — ウェブ生成元の概念

【雑感】

ん、結局ワカンネ

 

DRYな備忘録として

  

ネットワーク超入門講座 第3版

ネットワーク超入門講座 第3版