javascript之选项请求而不是 XMLHTTPRequest 中的 PUT
mengfanrong
阅读:23
2024-11-01 17:39:52
评论:0
我尝试在 REST 中执行 Web 服务的 html+javascript 部分。以此代码为例:
<!DOCTYPE html>
<html lang="en"
<script type="text/javascript">
function testPut( url ){
var xhr = new XMLHttpRequest();
xhr.open( 'PUT', url, false );
xhr.setRequestHeader( 'Content-Type', 'text/plain' );
xhr.send( null );
}
</script>
<body>
<form name="test" action="">
<input type="button" value="Lanceur" onclick="testPut('http://fake.es:8080')" />
</form>
</body>
</html>
但是在网络服务器中(通过 web.py 完成)我得到的是 OPTIONS 而不是 PUT:
111.111.111.111:52014 - - [15/May/2013 17:01:47] "HTTP/1.1 OPTIONS /" - 200 OK
我该如何解决?要删除 OPTIONS 请求并仅发送 PUT?
请您参考如下方法:
我的猜测是您正在发出跨域请求,因此浏览器将 OPTIONS 请求作为“预检请求”发送,请求服务器允许发送 PUT 请求。
要确认是这种情况,请查看 OPTIONS 请求的 header 。您应该看到这些 header :
- 来源:这表示您的客户端代码所在的域
- Access-Control-Request-Method:您尝试发送的方法
- Access-Control-Request-Headers:如果您的请求包含除 Accept、Content-Type 和其他一些默认接受的 header 以外的 header ,则将包含此 header
OPTIONS /cors HTTP/1.1
Origin: http://your_request_domain.com
Access-Control-Request-Method: PUT
Access-Control-Request-Headers: ...
Host: server_request_domain.com
...
如果服务器允许,您应该在 OPTIONS 响应中看到这些 header :
Access-Control-Allow-Origin: <<your domain or *>>
Access-Control-Allow-Methods: GET, POST, PUT
Access-Control-Allow-Headers: <<list of allowed headers>>
参见 this HTML 5 Rocks Tutorial on CORS以获得对跨源资源共享 (CORS) 工作原理的很好解释。
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。