ローカルLAN(machineA)に2つのWebサーバーを備えたマシンがあります。1つ目はXBMCに組み込まれているもの(ポート8080)で、ライブラリが表示されます。2番目のサーバーは、オンデマンドでファイル変換をトリガーするために使用しているCherryPy pythonスクリプト(ポート8081)です。ファイル変換は、XBMCサーバーから提供されるページからのAJAX POST要求によってトリガーされます。
- 後藤ます。http://マシンA:8080これはディスプレイライブラリー
- ライブラリが表示されます
- ユーザーは次のコマンドを発行する「変換」リンクをクリックします-
jQuery Ajaxリクエスト
$.post('http://machineA:8081', {file_url: 'asfd'}, function(d){console.log(d)})
- ブラウザは、次のヘッダーを含むHTTP OPTIONSリクエストを発行します。
リクエストヘッダー-オプション
Host: machineA:8081
User-Agent: ... Firefox/4.01
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Origin: http://machineA:8080
Access-Control-Request-Method: POST
Access-Control-Request-Headers: x-requested-with
- サーバーは次のように応答します。
応答ヘッダー-オプション(ステータス= 200 OK)
Content-Length: 0
Access-Control-Allow-Headers: *
Access-Control-Max-Age: 1728000
Server: CherryPy/3.2.0
Date: Thu, 21 Apr 2011 22:40:29 GMT
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, GET, OPTIONS
Content-Type: text/html;charset=ISO-8859-1
- その後、会話は停止します。理論的には、サーバーは正しい(?)CORSヘッダー(Access-Control-Allow-Origin:*)で応答したため、ブラウザーはPOST要求を発行する必要があります
トラブルシューティングのために、http: //jquery.comから同じ$ .postコマンドも発行しました。これは私が困惑しているところです、jquery.comから、postリクエストは機能し、OPTIONSリクエストはPOSTによって送信されます。このトランザクションのヘッダーは以下のとおりです。
リクエストヘッダー-オプション
Host: machineA:8081
User-Agent: ... Firefox/4.01
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Origin: http://jquery.com
Access-Control-Request-Method: POST
応答ヘッダー-オプション(ステータス= 200 OK)
Content-Length: 0
Access-Control-Allow-Headers: *
Access-Control-Max-Age: 1728000
Server: CherryPy/3.2.0
Date: Thu, 21 Apr 2011 22:37:59 GMT
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, GET, OPTIONS
Content-Type: text/html;charset=ISO-8859-1
リクエストヘッダー-POST
Host: machineA:8081
User-Agent: ... Firefox/4.01
Accept: */*
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: http://jquery.com/
Content-Length: 12
Origin: http://jquery.com
Pragma: no-cache
Cache-Control: no-cache
応答ヘッダー-POST(STATUS = 200 OK)
Content-Length: 32
Access-Control-Allow-Headers: *
Access-Control-Max-Age: 1728000
Server: CherryPy/3.2.0
Date: Thu, 21 Apr 2011 22:37:59 GMT
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, GET, OPTIONS
Content-Type: application/json
同じリクエストが一方のサイトでは機能するが、他方では機能しない理由を理解できません。誰かが私が欠けているものを指摘できるかもしれないことを願っています。ご協力いただきありがとうございます!