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

为什么HttpRequest发送选项动词而不是POST?,post,httprequest,dart,Post,Httprequest,Dart,我得到了这个密码: var-req=new-HttpRequest(); 请求打开(“POST”http://localhost:8031/rest/user/insert"); setRequestHeader(“内容类型”、“应用程序/json”); 请求发送(json.stringify(user_-map)); 但是,当我在fiddler中看到后动词时,我看到的不是后动词: 选项http://localhost:8031/rest/user/insert HTTP/1.1 主机:loc

我得到了这个密码:

var-req=new-HttpRequest();
请求打开(“POST”http://localhost:8031/rest/user/insert");
setRequestHeader(“内容类型”、“应用程序/json”);
请求发送(json.stringify(user_-map));
但是,当我在fiddler中看到后动词时,我看到的不是后动词:

选项http://localhost:8031/rest/user/insert HTTP/1.1
主机:localhost:8031
连接:保持活力
访问控制请求方法:POST
来源:http://127.0.0.1:3030
用户代理:Mozilla/5.0(Windows NT 6.2;WOW64)AppleWebKit/537.33(KHTML,如Gecko)Chrome/27.0.1430.0(Dart)Safari/537.33
访问控制请求标头:来源、内容类型
接受:*/*
推荐人:http://127.0.0.1:3030/E:/grole/dart/Clases/Clases/web/out/clases.html
接受编码:gzip、deflate、sdch
接受语言:es,es;q=0.8
接受字符集:ISO-8859-1,utf-8;q=0.7,*;q=0.3
如您所见,它使用的是选项动词而不是POST


发生了什么?

选项动词是一些浏览器发送的飞行前请求,用于检查跨源请求的有效性。它几乎与服务器一起检查是否允许
来源
(请求者)请求指定的资源。此外,根据服务器发回的头,它可以让浏览器知道允许源站从服务器请求哪些头、方法和资源

浏览器发送选项请求,然后如果服务器用正确的头(CORS头)回复,允许源站发出请求,您应该会看到您的POST请求完成

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

这就是所谓的跨源资源共享。Mozilla在这方面有一些非常好的文档


如果你有更多的问题,让我知道,我会回答他们

避免此问题的一种方法是发送不带自定义头的请求有效负载,并使用formData设置请求有效负载。

选项动词用于发送飞行前请求,以便与服务器检查是否发送跨域请求。由于origin->127.0.0.1:8031和host->localhos:3t完整答案?看见现在它更适合作为一个评论,因为它只是一个一般性的建议