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) 工作原理的很好解释。


标签:JavaScript
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号