2011-12-12 5 views
5

JQuery Getメソッドを学習しています。Strange JQuery Error "コード501、メッセージサポートされないメソッドオプション"

(ちょうど「Python -m SimpleHTTPServer」というコマンドを入力する)Python HTTPサーバーを起動します。

私のウェブブラウザで「http:// localhost:80」にアクセスしてこのウェブサーバをテストしても問題ありません。しかし、私はこの非常にシンプルなjavascriptを書いて私のウェブサーバを訪問する。

「コード501、メッセージサポートされていないメソッド( 『OPTIONS』)」

私は、クロスドメインリクエストはJQueryを想定jquery.xdomainajax.jsライブラリを使用します。私は、エラーメッセージが表示されます。私は、このような "http://www.google.ca" として、他のどのURLにUを変更した場合、

<html> 
<head> 
<script src="jquery.min.js"></script> 
<script src="jquery.xdomainajax.js"></script> 
<script type="text/javascript"> 
$(document).ready(function(){ 
    u = 'http://localhost:80'; 
jQuery.get(u, function(res){  
    $("#data").html(res.responseText) 
}); 
}); 


</script> 
</head> 
<body> 
<p id="data"></p> 
</body> 
</html> 

実際:

は、ここに私のjavascriptのコードです。それはかなりうまくいく。しかし、私はそれが基本的なPython HTTPサーバではうまくいかない理由は知らない。誰でも助けてくれますか?

答えて

10

私が行うことは、カスタマイズされたHTTPRequestHandlerを書くことです。 MyHandler内にdo-OPTIONSメソッドを追加して、ブラウザに私のサーバサポートCORSを伝えます。これには、アクセス制御許可元、アクセス制御許可メソッド、およびアクセス制御許可ヘッダーを送信します。また、do_GETメソッドに "self-control-allow-Origin"、 "* ')"ステートメントを追加します。

class MyHandler(BaseHTTPRequestHandler): 
    def do_OPTIONS(self):   
     self.send_response(200, "ok")  
     self.send_header('Access-Control-Allow-Origin', '*')     
     self.send_header('Access-Control-Allow-Methods', 'GET, POST, OPTIONS') 
     self.send_header("Access-Control-Allow-Headers", "X-Requested-With")   

    def do_GET(self):   
     self.send_response(200) 
     self.send_header('Access-Control-Allow-Origin', '*') 
     self.send_header('Content-type', 'text/html')          
     self.end_headers()    
     self.wfile.write("<html><body>Hello world!</body></html>") 
     self.connection.shutdown(1) 
2

はCORSプリフライトリクエスト(https://developer.mozilla.org/En/HTTP_access_control)

私はあなたが別のドメイン/ポートにアクセスしようとしていると思うように見えます。要求に応じて、ブラウザーは、サーバーが最初に送信するヘッダーまたはHTTPメソッドのセットをサーバーが受け入れるかどうかを知るために、プリフライト要求(OPTION要求)を送信します。サーバーがOKに応答すると、ブラウザは実際の要求を送信します。

PythonサーバーはOPTIONs要求を実装していないようです。したがって、エラーです。

ヒント:ネットワーク検査ツール(tcpdump、wireshark、ngrep ...)は、httpリクエストやネットワークエラーを処理する際に多くの手助けをします。

+0

こんにちはセルジオ、あなたの提案に感謝します。私はちょうどそれを把握する。 – Xiao

3

許可されたヘッダーに「Content-Type」などのフィールドを追加する必要がある場合もあります。

self.send_header("Access-Control-Allow-Headers", "X-Requested-With, Content-Type") 
0

これは、クロスソースリソース共有(CORS)プリフライトリクエストのようです。

CORSを強くサーバーの構成に関連している仕様ですので、私はあなたの特定のプラットフォーム用CORSの実装の詳細が表示されますがありhttp://enable-cors.org/

を読むことをお勧めします。

関連する問題