我尝试在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服务器(使用web.py完成)中,我获得了OPTIONS而不是PUT:
111.111.111.111:52014 - - [15/May/2013 17:01:47] "HTTP/1.1 OPTIONS /" - 200 OK
我如何解决它?要删除OPTIONS请求并仅发送PUT?
答案 0 :(得分:13)
我的猜测是您正在进行跨域请求,因此浏览器将OPTIONS请求作为'预检请求'发送,要求服务器发送PUT请求。
要确认是这种情况,请查看OPTIONS请求的标题。你应该看到这些标题:
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响应中看到这些标题:
Access-Control-Allow-Origin: <<your domain or *>>
Access-Control-Allow-Methods: GET, POST, PUT
Access-Control-Allow-Headers: <<list of allowed headers>>
有关跨源资源共享(CORS)如何工作的详细解释,请参阅this HTML 5 Rocks Tutorial on CORS。