2013-03-25 7 views
20

Ich habe diesen Code:Warum sendet HttpRequest das OPTIONS-Verb anstelle von POST?

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)); 

Aber anstatt das Postverb zu senden, wenn ich es in Fiedler sehen Ich sehe dies:

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 

Wie Sie sehen können, ist es die OPTIONS Verb statt POST?

Was ist los?

+0

Das OPTION-Verb wird zum Senden der Preflight-Anfrage für die Überprüfung mit Server zum Senden der domänenübergreifenden Anfrage verwendet. Seit dem Ursprung -> 127.0.0.1:8031 und Host -> localhos: 3t – kiran

Antwort

33

Das Verb OPTIONS ist eine Preflight-Anforderung, die von einigen Browsern gesendet wird, um die Gültigkeit von Kreuzherkunftsanforderungen zu überprüfen. Es überprüft ziemlich genau mit dem Server, dass der Origin (Anforderer) die Anforderung für eine bestimmte Ressource vornehmen darf. Je nachdem, welche Header vom Server zurückgesendet werden, kann der Browser außerdem wissen, welche Header, Methoden und Ressourcen der Ursprung vom Server anfordern darf.

Der Browser sendet die OPTIONS-Anfrage. Wenn der Server mit den richtigen Headern (CORS-Header) antwortet, die es dem Ursprung erlauben, die Anfrage zu stellen, sollte Ihre POST-Anfrage danach durchlaufen werden.

Beachten Sie, dass die CORS-Header sowohl bei der OPTIONS-Antwort als auch bei der POST-Antwort zurückgegeben werden müssen. Dies bedeutet, dass Ihr Server in der Lage sein muss, auf die Optionsmethode auf den Routen zu reagieren, auf die Sie über Domänengrenzen hinweg zugreifen möchten.

Dies wird als Cross-Origin Resource Sharing bezeichnet. Mozilla hat eine ziemlich gute Dokumentation zu diesem Thema. https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS

Wenn Sie weitere Fragen haben, lassen Sie es mich wissen und ich werde ihnen antworten.