2013年5月1日水曜日

nginx Access-Control-Allow-Originでmultipleな環境に対応する太郎

Ajaxでクロスサイトスクリプティング的なことするとき、アクセス先のサーバに Access-Control-Allow-Originヘッダーを追加しないといけないみたいなんだな。 普通は、 単一サイトからのアクセスでGETだけ許可するのであれば
Access-Control-Allow-Origin http://yattarou.jp;
add_header Access-Control-Allow-Methods GET;
全部許可する場合は
Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods GET;
でできる。 ただ、大規模なサイトでallで許可するって何されるかわかんないし、ちょっとこわいよねってことで。 指定したサイトだけ許可する方法にしたかったのが、↓の書き方じゃだめだった。
Access-Control-Allow-Origin http://yattarou.jp http://yattarou2.jp;
add_header Access-Control-Allow-Methods GET;
なので、こう書いたらいけたよー yattarou.jpがoriginヘッダーに組み込まれていれば、Access-Control-Allow-Origin:*を付けて上げるっていう ことです。 ただし!!リクエストにorginヘッダーが入っているときのみ有効なので、注意してください。 アプリ、使用するメソッドによっては、originヘッダーが入ってない場合があるので

    server {
        listen       80;
        server_name  yattarou.jp;

        root /home/yattarou;

         location / {

         if ($http_origin ~ "^(http://yattarou.jp|http://yattarou2.jp|http://yattarou3.jp)$") {
           add_header Access-Control-Allow-Origin *;
           add_header Access-Control-Allow-Methods GET;
         }
       }

0 件のコメント: