2011-12-12 11 views
5

मैं JQuery प्राप्त विधि सीख रहा हूं। मैं एक पायथन HTTP सर्वर शुरू करता हूं:अजीब JQuery त्रुटि "कोड 501, संदेश असमर्थित विधि विकल्प"

(बस टाइपिंग कमांड "पायथन -एम सरल एचटीटीपीएस सर्वर")।

मेरे वेब ब्राउज़र पर बस "http: // localhost: 80" पर जाकर इस वेबसर्वर का परीक्षण करना ठीक है। हालांकि, जब मैं अपने वेबसर्वर पर जाने के लिए यह बहुत ही सरल जावास्क्रिप्ट लिखता हूं। मैंने एक त्रुटि संदेश मिलता है:

"कोड 501, संदेश असमर्थित विधि ('विकल्प')"

मैं jquery.xdomainajax.js पुस्तकालय जो क्रॉस-डोमेन अनुरोध JQuery लगता है का उपयोग करें।

<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> 

वास्तव में अगर मैं इस तरह के "http://www.google.ca" के रूप में किसी अन्य यूआरएल के लिए यू बदलने के लिए,,:

यहाँ मेरी जावास्क्रिप्ट कोड है। यह काफी अच्छी तरह से काम करता है। लेकिन मुझे नहीं पता कि यह मूल पायथन HTTP सर्वर के लिए क्यों काम नहीं करता है। क्या कोई मेरी मदद कर सकता है?

उत्तर

10

मैं एक अनुकूलित HTTPRequestHandler लिखना चाहता हूं। मैं अपने सर्वर समर्थन CORS ब्राउज़र को बताने के लिए MyHandler के अंदर do-OPTIONS विधि जोड़ता हूं। यह हेडर एक्सेस-कंट्रोल-अनुमति-उत्पत्ति, एक्सेस-कंट्रोल-स्वीट-मेथड और एक्सेस-कंट्रोल-स्वीट-हेडर भेजकर किया जाता है। साथ ही, मैं do_GET विधि में "self.send_header ('एक्सेस-कंट्रोल-ऑब्जेक्ट-ओरिजिन', '*')" कथन जोड़ता हूं।

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 preflight अनुरोध (https://developer.mozilla.org/En/HTTP_access_control)

मुझे लगता है कि आप किसी दूसरे डोमेन/पोर्ट के लिए उपयोग करने के लिए कोशिश कर रहे हैं ऐसा लगता है। अनुरोध के आधार पर, ब्राउजर एक प्रीफलाइट अनुरोध (एक विकल्प अनुरोध) भेजेगा, यह जानने के लिए कि सर्वर हेडर या HTTP विधि के सेट को स्वीकार करता है जिसे आप पहले स्थान पर भेजना चाहते थे। यदि सर्वर ठीक से जवाब देता है, तो ब्राउज़र वास्तविक अनुरोध भेजेगा।

ऐसा लगता है कि पायथन सर्वर OPTIONs अनुरोधों को लागू नहीं करता है, इसलिए त्रुटि।

युक्ति: नेटवर्क निरीक्षण उपकरण (tcpdump, wireshark, ngrep ...) http अनुरोधों और/या नेटवर्क त्रुटियों से निपटने में बहुत मदद करते हैं।

+0

हाय सर्जीओ, आपके सुझाव के लिए धन्यवाद। मैं बस इसे समझता हूँ। – Xiao

3

आपको अनुमति वाले शीर्षकों को "सामग्री-प्रकार" जैसे फ़ील्ड जोड़ने की भी आवश्यकता हो सकती है।

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

यह क्रॉस-ओरिजिनल रिसोर्स शेयरिंग (सीओआरएस) प्रीफलाइट अनुरोध की तरह दिखता है।

के बाद से CORS एक विनिर्देश है कि दृढ़ता से एक सर्वर विन्यास से संबंधित है, मैं http://enable-cors.org/

वहाँ आप अपने विशिष्ट मंच के लिए CORS को लागू करने के बारे में अधिक देखेंगे पढ़ने के लिए सलाह देते हैं।

संबंधित मुद्दे