@kyanny's blog

My thoughts, my life. Views/opinions are my own.

Access-Control-Allow-Origin で Firefox の same origin policy を乗り越える

Same origin policy for JavaScriptCross-Origin Resource Sharing (CORS) - HTTP | MDN の話。

Firefox で別ホストに対して xhr する場合に same origin policy で云々、というのはぼんやり知ってたけど、同じホストでもポートが違うとダメというのは知らなかった。 http://localhost/hoge.html に書いた js から plackup した http://localhost:5000/ に対して POST しようとしてハマった。 Firebug でみると OPTIONS リクエストが飛んでて POST してないので、これ前に見たことあるな―と思って調べなおした。

[さらに気になる]JSONの守り方 (2/3):教科書に載らないWebアプリケーションセキュリティ(5) - @IT ここに詳しいが、 same origin policy を乗り越えたい場合、「xhr のリクエストを受けるほうのサーバが、レスポンスヘッダ Access-Control-Allow-Origin で、アクセス元のホスト(+ポート)を指定して返す」必要があった。 xhr.setRequestHeader('Access-Control-Allow-Origin', '*'); とか js でリクエスト送るほうでやったりしてしまってずいぶん手間取った。

まぁ最初から plackup したアプリのほうで全部サーブしろよという話ではある。けど dispatcher なり router なりとの組み合わせがまだよくわかんないな。GitHub - miyagawa/plack-dispatching-samples: Examples of Plack dispatcher using various CPAN modules とかみているんだけど。手元でごにょごにょやってるだけだから、無理に dispatcher/router にこだわらずに path みて都度別のコードブロック実行、とかやってもいいんだけどちょっと悔しいな。