2013-03-25 2 views
20

나는이 코드를 가지고 : 내가 피들러에서 볼 때이 참조하는 대신 POST 동사를 보내는,HttpRequest가 POST 대신 OPTIONS 동사를 보내는 이유는 무엇입니까?

var req = new HttpRequest(); 
req.open("POST", "http://localhost:8031/rest/user/insert"); 
req.setRequestHeader("Content-type", "application/json"); 
req.send(json.stringify(user_map)); 

을하지만 : 당신이 볼 수 있듯이

OPTIONS http://localhost:8031/rest/user/insert HTTP/1.1 
Host: localhost:8031 
Connection: keep-alive 
Access-Control-Request-Method: POST 
Origin: http://127.0.0.1:3030 
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.33 (KHTML, like Gecko) Chrome/27.0.1430.0 (Dart) Safari/537.33 
Access-Control-Request-Headers: origin, content-type 
Accept: */* 
Referer: http://127.0.0.1:3030/E:/grole/dart/Clases/Clases/web/out/clases.html 
Accept-Encoding: gzip,deflate,sdch 
Accept-Language: es-ES,es;q=0.8 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3 

것은,이 옵션을 사용 대신 POST 동사?

무슨 일 이니?

+0

OPTION 동사는 도메인 간 전송 요청을 보내기 위해 서버에서 확인하기 위해 프리 플라이트 요청을 보내는 데 사용됩니다. 원본 -> 127.0.0.1:8031 및 호스트 -> localhos : 3t 이후 – kiran

답변

33

동사는 일부 브라우저에서 교차 출격 요청의 유효성을 검사하기 위해 보낸 프리 플라이트 요청입니다. Origin (요청자)이 지정된 리소스에 대한 요청을 할 수 있다는 것을 서버에서 확인합니다. 또한 어떤 헤더가 서버에 의해 다시 보내지는지에 따라, 브라우저가 서버에서 요청할 수있는 헤더, 메소드 및 리소스를 브라우저에 알릴 수 있습니다.

브라우저가 OPTIONS 요청을 보내면 원 서버가 요청을 할 수 있도록 올바른 헤더 (CORS 헤더)를 사용하여 서버가 응답하면 POST 요청이 이후에 처리되어야합니다.

CORS 헤더는 OPTIONS 응답과 POST 응답 모두에서 반환되어야합니다. 즉, 서버가 도메인 전체에 액세스하려는 경로의 옵션 메소드에 응답 할 수 있어야합니다.

이것은 교차 출처 자원 공유라고합니다. 모질라는 그 주제에 대해 꽤 좋은 문서를 가지고 있습니다. https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS

더 많은 질문이 있으면 알려 주시면 답변 드리겠습니다.

관련 문제