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

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

(只需输入命令“ Python -m SimpleHTTPServer ”)。

只需在我的网络浏览器上访问“http:// localhost:80”就可以测试这个网络服务器。 但是,当我写这个非常简单的JavaScript来访问我的网络服务器。 我收到一条错误消息:

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

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

这是我的javascript代码:

     $(document).ready(function(){ u = 'http://localhost:80'; jQuery.get(u, function(res){ $("#data").html(res.responseText) }); });    

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

我所做的是编写一个自定义的HTTPRequestHandler 。 我在MyHandler中添加了一个do-OPTIONS方法来告诉浏览器我的服务器支持CORS。 这是通过发送标头Access-Control-Allow-Origin,Access-Control-Allow-Methods和Access-Control-Allow-Headers来完成的 。 另外,我在do_GET方法中添加了一个“self.send_header(’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("Hello world!") self.connection.shutdown(1) 

您可能还需要将“Content-Type”等字段添加到允许的标头中。

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

看起来像CORS预检请求(https://developer.mozilla.org/En/HTTP_access_control)

我想你正试图访问不同的域/端口。 根据请求,浏览器将发送预检请求(OPTION请求)以了解服务器是否接受您想要首先发送的Headers或HTTP方法集。 如果服务器响应OK,浏览器将发送实际请求。

看起来Python服务器没有实现OPTION请求,因此出错。

提示:网络检查工具(tcpdump,wireshark,ngrep …)在处理http请求和/或网络错误时会提供很多帮助。

它看起来像是跨源资源共享(CORS)预检请求。

由于CORS是与服务器配置密切相关的规范,我建议阅读http://enable-cors.org/

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