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