2013-05-15 2 views
2

REST에서 웹 서비스의 html + javascript 부분을 수행하려고합니다.OPTIONS 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> 

하지만 대신에 PUT의 옵션지고 (web.py으로 수행) 웹 서버에서 :

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

내가 그것을 어떻게 해결 사기를 예제로이 코드? OPTIONS 요청을 제거하고 PUT 만 보내시겠습니까?

+0

비슷한 질문 (here) [http://stackoverflow.com/q/8153832/57091]. – robsch

답변

12

브라우저가 OPTIONS 요청을 '프리 플라이트 요청'으로 보내 서버가 PUT 요청을 보낼 수있는 권한을 요청하도록 크로스 도메인 요청을 내 생각입니다.

이 경우를 확인하려면 OPTIONS 요청의 헤더를 살펴보십시오. 이러한 헤더를 볼 수 :

  • 원산지가 : 당신이
  • 액세스 -를 보내려고 어떤 방법이 클라이언트 코드는
  • 액세스 제어-요청-방법있는 도메인을 나타냅니다 제어 요청 헤더 : 요청에 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