我正在学习JQuery Get方法。我启动了一个Python HTTP服务器:
(只需输入命令“ Python -m SimpleHTTPServer ”)。
只需在我的网络浏览器上访问“http:// localhost:80”即可测试此网络服务器。但是,当我写这个非常简单的JavaScript来访问我的网络服务器。我收到一条错误消息:
“代码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>
实际上,如果我将您更改为任何其他网址,例如“http://www.google.ca”。它运作得很好。但我不知道为什么它不适用于基本的Python HTTP服务器。任何人都可以帮助我吗?
答案 0 :(得分:13)
我的工作是编写自定义的 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("<html><body>Hello world!</body></html>")
self.connection.shutdown(1)
答案 1 :(得分:4)
您可能还需要在允许的标头中添加“Content-Type”等字段。
self.send_header("Access-Control-Allow-Headers", "X-Requested-With, Content-Type")
答案 2 :(得分:3)
看起来像是一个CORS预检请求(https://developer.mozilla.org/En/HTTP_access_control)
我猜您正在尝试访问其他域/端口。根据请求,浏览器将发送预检请求(OPTION请求)以了解服务器是否接受您想要首先发送的Headers或HTTP方法集。如果服务器响应OK,浏览器将发送实际请求。
看起来Python服务器没有实现OPTION请求,因此出错。
提示:网络检查工具(tcpdump,wireshark,ngrep ...)在处理http请求和/或网络错误时会有很大帮助。
答案 3 :(得分:1)
它看起来像是跨源资源共享(CORS)预检请求。
由于CORS是与服务器配置密切相关的规范,因此我建议您阅读http://enable-cors.org/
在那里,您将看到有关为特定平台实施CORS的更多信息。