为什么HttpRequest的发送选项动词,而不是POST的?(Why is HttpRequest

2019-07-23 03:07发布

我得到这个代码:

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

正如你所看到的,它使用的是OPTIONS动词,而不是POST的?

这是怎么回事?

Answer 1:

OPTIONS动词是一些浏览器发送到检查跨起源请求的有效性的预检要求。 它几乎与检查的服务器Origin (请求)被允许做一个指定的资源请求。 另外,根据其报头由服务器发回它让浏览器知道原点允许请求形成服务器,其头部,方法和资源。

浏览器发送OPTIONS请求,然后如果服务器响应回到正确的标题(CORS标头),使原点发出请求,你应该可以看到POST请求经历之后。

需要注意的是,CORS标头必须在两个选项响应以及在POST响应中返回。 这意味着你的服务器必须能够向选择方法应对你想跨域访问路线。

这就是所谓的跨来源资源共享。 Mozilla有关于这个问题的一些不错的文档。 https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS

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



文章来源: Why is HttpRequest sending the OPTIONS verb instead of POST?