リクエストのOriginヘッダーの内容をコピーするAccess-Control-Allow-Originヘッダーを使用してHTTP OPTIONSメソッドへの応答を提供しようとしています。
これは、私が理解できない理由で、明らかに機能していない。
tl; dr: OPTIONSからの応答は言う:
Access-Control-Allow-Origin: http://10.0.0.105:9294
後続のGETには次のものがあります。
Origin:http://10.0.0.105:9294
Chromeは言う:
Origin http://10.0.0.105:9294 is not allowed by Access-Control-Allow-Origin
WTFはありませんか?
もっと詳しく...
Chromeのデベロッパーツールウィンドウを見ると、リクエストヘッダーは次のようになります。
OPTIONS /user/kris HTTP/1.1
Host: 10.0.0.104:8080
Connection: keep-alive
Access-Control-Request-Method: GET
Origin: http://10.0.0.105:9294
User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.75 Safari/537.1
Access-Control-Request-Headers: Origin, x-requested-with, content-type, accept
Accept: */*
Referer: http://10.0.0.105:9294/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
応答ヘッダーは次のとおりです。
HTTP/1.0 200 OK
Date: Mon, 13 Aug 2012 11:23:45 GMT
Server: WSGIServer/0.1 Python/2.7.3
Content-Length: 0
Access-Control-Allow-Methods: GET, PUT, POST, DELETE, HEAD, OPTIONS
Access-Control-Max-Age: 10
Access-Control-Allow-Origin: http://10.0.0.105:9294
Access-Control-Allow-Headers: X-Requested-With, Authorization, X-Huzu-User, Content-Type, Accept
Content-Type: text/html; charset=UTF-8
JQueryがOPTIONSリクエストを送信して上記のレスポンスを受け取った後、2つの奇妙なことが起こります。 OPTIONSレスポンス(200)は、エラーとして開発者コンソールに表示されます。
OPTIONS http://10.0.0.104:8080/user/kris 200 (OK)
その後、GET要求は拒否されます。コンソールのエラー:
XMLHttpRequest cannot load http://10.0.0.104:8080/user/kris. Origin http://10.0.0.105:9294 is not allowed by Access-Control-Allow-Origin.
なぜか分かりません。何が悪いのですか?
わかった、わかった。飛行前のOPTIONSリクエストを適切に処理する必要があるようですが、クロスサイトリソースリクエストが機能するためにはNOT SUFFICIENTです。
OPTIONSリクエストが満足のいくヘッダーで返された後、同じURLへの後続のリクエストへのすべての応答も必要な "Access-Control-Allow -Origin "ヘッダー。それ以外の場合、ブラウザーはそれらを飲み込み、デバッガーウィンドウにも表示されません。
したがって、のように見えますOPTIONS応答に問題があるため、ブラウザはリクエストをキャンセルしましたが、実際には、ブラウザは、実際の要求とそれらを拒否します。