为什么axios请求要发两次协议?

发布于 2022-09-11 21:06:18 字数 774 浏览 8 评论 0

为什么在vue项目中用axios请求会发两次协议,第一次请求什么参数都没带,而且回包也是空白,第二次就是正常的请求?
在网上只搜到原因:前后端未满足“同源策略/SOP”,俗称请求跨域。浏览器一旦发现请求跨域,就会使用CORS通信,自动添加一些附加的头信息,简单请求只会有一次请求,只有非简单请求会附加一次请求。

但是有的从git上拉的项目就只发送了一次请求,虽然这个项目用了反向代理,看上去同源:
clipboard.png

而我的确实跨域了,但是如下图,login协议和list相比较,用的同一个post方法,都是跨域,为什么login只请求一次,之后的其他协议都是两次,这就又让我搞不懂了?
clipboard.png

clipboard.png

clipboard.png

clipboard.png

还有,有没有办法让它只请求一次?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

够钟 2022-09-18 21:06:18

cors有分简单请求和非简单请求,你看下这几个请求是什么?http://www.ruanyifeng.com/blo...

梦罢 2022-09-18 21:06:18

OPTIONS请求是CORS的预请求,检测实际请求是否可以被服务器所接受
不用想着怎么去掉它,就像你做一件事情,先尝试这件事到底做不做得了
具体详情 https://developer.mozilla.org...

海的爱人是光 2022-09-18 21:06:18

多谢楼上解惑,在这里记录下:
在不跨域的前提下,不存在简单请求和非简单请求的概念,协议都只发一次(即使有自定义请求头);在跨域时,简单请求只发一次请求,非简单请求(比如在header里塞了token)发两次。

至于简单请求和非简单请求区分,根据阮一峰的帖子:

只要同时满足以下两大条件,就属于简单请求。
(1) 请求方法是以下三种方法之一:
HEAD
GET
POST
(2)HTTP的头信息不超出以下几种字段:
Accept
Accept-Language
Content-Language
Last-Event-ID
Content-Type:只限于三个值application/x-www-form-urlencoded、multipart/form-data、text/plain
其余的都是非简单

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文