避免http请求发两次,一次options一次get

本文探讨了解决跨域问题时遇到的非简单请求现象,详细解释了为何带有自定义header或application/json的请求会被标记为非简单请求,并触发预检请求。文章进一步介绍了如何通过设置Access-Control-Max-Age来缓存预检请求结果,减少后续请求的次数,提高效率。

其实就是非简单请求现象,其实就是一个解决跨域问题后的一个遗留问题,先看现象

为毛呢,这个就得先从啥是“非简单请求”开始说起,其实就是header里边带了自定义数据后,浏览器会默认你这个请求为“非简单请求”,会向后端先行发送一个“options”类型的请求,只有这个请求被通过了,跨域问题就解决了。(顺带说一下,application/json也会触发这个玩意,所以跨域嘛,是必须的,基础增删查改外类型也会触发)

但是,这就导致每次解决跨域都需要先发送一次“options”请求,也就是所谓的两次请求。那如何避免呢,这个嘛,看这个的估计都是前端吧,不过很可惜,我并不知道有前端解决的方法,毕竟我不能不带token,不过后端的倒有一个。

就是后端在请求的返回头部添加:

Access-Control-Max-Age:时间  。

数值代表preflight request  (预检请求)的返回结果(即 Access-Control-Allow-Methods 和Access-Control-Allow-Headers 提供的信息) 可以被缓存多久,单位是秒。

比如说:将预检请求的结果缓存10分钟:

Access-Control-Max-Age: 600 
如果值为 -1,则表示禁用缓存,每一次请求都需要提供预检请求,即用OPTIONS请求进行检测。

Access-Control-Max-Age方法对完全一样的url的缓存设置生效,多一个参数也视为不同url。也就是说,如果设置了10分钟的缓存,在10分钟内,所有请求第一次会产生options请求,以后就只发送真正的请求了。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值