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

use*_*369 24 post httprequest dart

我得到了这段代码:

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));
Run Code Online (Sandbox Code Playgroud)

但是,当我在小提琴手中看到它时,我没有发送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
Run Code Online (Sandbox Code Playgroud)

如您所见,它使用OPTIONS动词而不是POST?

这是怎么回事?

Leo*_*rea 36

OPTIONS动词是一些浏览器发送到检查跨起源请求的有效性的预检要求.它几乎检查服务器Origin允许(请求者)发出对指定资源的请求.此外,根据服务器发回的标头,它允许浏览器知道允许来源从服务器请求哪些标头,方法和资源.

浏览器发送OPTIONS请求,然后如果服务器使用正确的标头(CORS标头)回复,允许来源发出请求,那么您应该看到POST请求经过.

请注意,必须在OPTIONS响应和POST响应上返回CORS头.这意味着您的服务器必须能够响应您要跨域访问的路由上的选项方法.

这称为跨源资源共享.Mozilla有关于这个主题的一些非常好的文档.https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS

如果您有更多问题,请告诉我,我会回答.