Access-Control-Allow-Origin試してみた。
Access-Control-Allow-Origin使うと、
XmlHttpRequestでクロスドメイン接続できるらしいので、そりゃおもしろいとレッツトライ。
とりあえず、テストドメインtest.devの公開領域に次のスクリプトを準備。
<?php header('Access-Control-Allow-Origin:http://localhost'); header('Content-Type:text/plain;charset=UTF-8'); echo 'Hello World';
で、localhostの公開領域に次のHTMLを置く。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script type="text/javascript" src="ajax.js"></script> <title>XmlHttpRequest Level2</title> </head> <body> <h1>XmlHttpRequet Level2</h1> </body> </html>
同様にJavascriptも置く。rpc.phpは冒頭のphpファイル。
ファイル分けた理由はとくになし。
window.onload = function() { var xhr = new XMLHttpRequest(); xhr.open('GET', 'http://test.dev/rpc.php', true); xhr.onreadystatechange = function() { if(xhr.readyState === 4) { var res = xhr.responseText; alert(res); } }; xhr.send(null); };
で、localhostのhtmlにブラウザアクセス。
アラートでた!Hello World返ってきた!うれしいなぁ。
でもこれ、Cookieを送れないらしいので、そこも調べてみる。
rpc.phpを次のように修正。
<?php header('Access-Control-Allow-Origin:http://localhost'); header('Content-Type:text/plain;charset=UTF-8'); $msg = ' World'; if(isset($_COOKIE['_test_'])) { $msg = ' Again'; } else { setcookie('_test_', 'on', time()+864000); } echo 'Hello' . $msg;
これで、http://test.dev/rpc.phpを直接ブラウザで開くと、初回はHello World。
更新するとCookieが効いてHello Againになる。
この状態で改めてlocalhostから接続を試す(念のためCookieは全部消しておく)。
アラートがHello Worldのまま。何度更新しても変わらない。
Firebugでレスポンスヘッダーみると、サーバからは確かにset-cookieきてるし、
FireCookieでももらったCookie見えるんだけど、次回のリクエストヘッダーにはつかない。
document.cookieから取り出して、自分でヘッダー追加しようと思ったけど、
document.cookieでとれるのはlocalhostのcookieだもんね。そりゃ取れんわ。
Firefoxではもらう分は確認できたけど、ChromeとかSafariだとちょっと違うみたい。
開発ツールでみた感じ、set-cookieが表示されない。
ChromeやSafariはもらうこともしないのかな。
セッション管理とかしたければ、Cookie以外の方法でってことなんだろうな。
(追記)
と思ったら、方法見つけた。