奇怪的JQuery错误代码501,消息不支持的方法OPTIONS"
Strange JQuery Error "code 501, message Unsupported method OPTIONS"
我正在学习JQuery Get方法。我启动了一个Python HTTP服务器:
(只需键入命令"Python -m SimpleHTTPServer")。
可以通过在浏览器上访问"http://localhost:80"来测试这个服务器。然而,当我写这个非常简单的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>
实际上,如果我将u更改为任何其他url,例如"http://www.google.ca"。它工作得很好。但是我不知道为什么它不能用于基本的Python HTTP服务器。有人能帮我吗?
我所做的是编写一个定制的HTTPRequestHandler。我在MyHandler中添加了一个do-OPTIONS方法来告诉浏览器我的服务器支持CORS。这是通过发送头Access-Control-Allow-Origin, Access-Control-Allow-Methods和Access-Control-Allow-Headers来完成的。此外,我还添加了一个"self"。send_header(‘Access-Control-Allow-Origin’,‘*’),语句do_GET方法
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")
self.end_headers()
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)
您可能还需要在允许的标题中添加诸如"Content-Type"之类的字段。
self.send_header("Access-Control-Allow-Headers", "X-Requested-With, Content-Type")
看起来像CORS飞行前请求(https://developer.mozilla.org/En/HTTP_access_control)
我猜你正在尝试访问一个不同的域/端口。根据请求的不同,浏览器将发送一个预发送请求(一个OPTION请求),以了解服务器是否首先接受您想要发送的header集合或HTTP方法。如果服务器响应OK,浏览器将发送真正的请求。
看起来Python服务器没有实现OPTIONs请求,因此出现错误。
提示:网络检查工具(tcpdump, wireshark, ngrep…)在处理http请求和/或网络错误时帮助很大。
它看起来像一个跨域资源共享(CORS)飞行前请求。
由于CORS是一个与服务器配置密切相关的规范,我建议阅读http://enable-cors.org/
在那里您将看到更多关于为您的特定平台实现CORS的信息。
- electronic BrowserWindow的最小高度和宽度在hide()show()方法之后不起作用
- 有没有任何方法可以将控制器从文件加载到ui路由器$stateProvider中
- 数组在递归方法中设置为null
- 打破承诺链的好方法是什么
- 在使用Polymer'加载所有json文件后执行方法;s的核心ajax
- 使用“;这个“;JavaScript原型方法中的关键字
- 序列化数据属性中对象的最可靠方法
- 使用Objective-C的JavaScript注入方法
- 有没有一种方法可以添加相同的项目val=“0”;4〃;到JavaScript中数组的每个对象
- 为什么方法.options对select无效
- X-Content-Type-Options=nosniff解决方法
- 不确定在我的情况下使用 ng-options 的最佳方法
- 在GET之前重新调整发送OPTIONS方法的角度
- HAproxy:OPTIONS和POST方法的不同503错误文件
- 理解Backbone.sync方法中的[options]参数
- 奇怪的JQuery错误代码501,消息不支持的方法OPTIONS"
- 有没有一种方法可以使用ng-options而不使用ng-change来更新两个值?
- 拒绝在框架中显示,因为它设置了'X-Frame-Options'拒绝facebook.UI共享方法
- 对象函数(){location.href=this.options.url);没有方法'apply'
- 不允许使用OPTIONS方法.Get工作,但不是POST