Javascript 奇怪的JQuery错误“;代码501,消息“不支持的方法选项”;

Javascript 奇怪的JQuery错误“;代码501,消息“不支持的方法选项”;,javascript,jquery,python,http,httpserver,Javascript,Jquery,Python,Http,Httpserver,我正在学习jqueryget方法。我启动了一个Python HTTP服务器: (只需键入命令“Python-msimplehttpserver”) 只需访问即可测试此Web服务器”http://localhost:80“在我的web浏览器上。然而,当我编写这个非常简单的javascript来访问我的Web服务器时。我收到一条错误消息: “代码501,消息不支持的方法('OPTIONS')” 我使用jquery.xdomainajax.js库,它假设跨域请求jquery 以下是我的javascri

我正在学习jqueryget方法。我启动了一个Python HTTP服务器:

(只需键入命令“Python-msimplehttpserver”)

只需访问即可测试此Web服务器”http://localhost:80“在我的web浏览器上。然而,当我编写这个非常简单的javascript来访问我的Web服务器时。我收到一条错误消息:

“代码501,消息不支持的方法('OPTIONS')”

我使用jquery.xdomainajax.js库,它假设跨域请求jquery

以下是我的javascript代码:

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

$(文档).ready(函数(){
u='http://localhost:80';
get(u,函数(res){
$(“#数据”).html(res.responseText)
});
});


实际上,如果我将u更改为任何其他url,例如“http://www.google.ca". 它工作得很好。但是我不知道为什么它不适用于基本的Python HTTP服务器。有人能帮我吗?

看起来像是CORS的飞行前请求(https://developer.mozilla.org/En/HTTP_access_control)

我猜您正在尝试访问其他域/端口。根据请求,浏览器将发送飞行前请求(选项请求),以了解服务器是否接受您首先要发送的一组头或HTTP方法。如果服务器响应正常,浏览器将发送实际请求

看起来Python服务器没有实现选项请求,因此出现了错误


提示:网络检查工具(tcpdump、wireshark、ngrep…)在处理http请求和/或网络错误时非常有用。

我要做的是编写一个定制的HTTPRequestHandler。我在MyHandler中添加了一个do OPTIONS方法,告诉浏览器我的服务器支持CORS。这是通过发送头访问控制允许来源、访问控制允许方法和访问控制允许头来完成的。另外,我在do_GET方法中添加了一个“self.send_头('Access-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) 
类MyHandler(BaseHTTPRequestHandler):
def do_选项(自):
自我发送_响应(200,“确定”)
self.send_头('Access-Control-Allow-Origin','*'))
self.send_头('Access-Control-Allow-Methods','GET,POST,OPTIONS'))
self.send_头(“访问控制允许头”,“X请求的带”)
def do_获得(自我):
自我发送_响应(200)
self.send_头('Access-Control-Allow-Origin','*'))
self.send_标题('Content-type','text/html')
self.end_头()
self.wfile.write(“你好,世界!”)
自连接关闭(1)

您可能还需要将“内容类型”等字段添加到允许的标题中

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

它看起来像一个跨源资源共享(CORS)飞行前请求

由于CORS是一个与服务器配置密切相关的规范,我建议阅读

在这里,您将看到有关为特定平台实现CORS的更多信息