为什么HttpRequest发送OPTIONS动词而不是POST?

问题描述:

我得到这个代码:为什么HttpRequest发送OPTIONS动词而不是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)); 

但是,而不是发送POST动词,当我看到它在提琴手我看到这一点:

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 2014-05-24 15:40:51

OPTIONS动词是由某些浏览器发送的用于检查跨源请求的有效性的预检请求。它几乎与服务器进行检查,允许Origin(请求者)对指定资源发出请求。另外,根据服务器发回的标题,它可以让浏览器知道哪些标题,方法和资源可以从服务器请求源。

浏览器发送OPTIONS请求,然后如果服务器回答正确的头部(CORS头部),允许源发出请求,则应该看到POST请求经过后。

请注意CORS标头必须在OPTIONS响应以及POST响应中返回。这意味着您的服务器必须能够响应您希望跨域访问的路由上的选项方法。

这就是所谓的跨源资源共享。 Mozilla在这方面有很好的文档。 https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS

如果您有更多的问题请告诉我,我会回答他们。