2013-05-15 53 views
2

我試圖在REST中完成web服務的html + javascript部分。有了這個代碼,例如:選項在XMLHTTPRequest中請求代替PUT

<!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做)我得到選項,而不是PUT:

111.111.111.111:52014 - - [15/May/2013 17:01:47] "HTTP/1.1 OPTIONS /" - 200 OK 

如何CON我解決呢?要刪除OPTIONS請求並僅發送PUT?

+0

類似的問題(這裏)[http://stackoverflow.com/q/8153832/57091]。 – robsch

回答

12

我的猜測是你正在做一個跨域請求,因此瀏覽器發送OPTIONS請求作爲'preflight-request',要求服務器發送PUT請求的權限。

要確認是這種情況,請查看OPTIONS請求的標題。您應該看到這些標題:

  • 產地:這表明域客戶端代碼是
  • 訪問控制請求法:什麼方法,你要發送
  • 訪問 - Control-Request-Headers:如果您的請求包含Accept,Content-Type以及默認接受的其他標頭,則將包含此標頭
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

+0

是的,你是對的。當我使用相同的本地主機進行測試時,我在兩臺電腦上開發。 – Zhen