这就是坑,后端设置导致两次请求,2020年项目。
别信直接修改前端代码。
别这么干,先排查后端配置。
实操提醒:检查后端CORS配置。
2022年那会儿,我在某个城市做项目,遇到个头疼的问题,就是cors跨域请求。当时那个量,得有几百次吧,每次请求都像是在跟服务器拉锯,耗时又耗力。
,我当时也懵,不知道怎么解决。后来才反应过来,得设置响应头,让服务器允许跨域。那会儿,我花了多少钱,得有好几千块吧,光是为了这个bug,就头疼了好久。
可能我偏激了点,但那时候真的感觉,这跨域请求就像是无底洞,越挖越深。现在想想,那时候的技术积累,真是来之不易啊。
说起来CORS跨域请求,这事儿在我混迹问答论坛的这些年里,真的是挺有意思的。记得有一次,有个哥们儿问,为什么他的前端代码在请求后端接口时,总是要发起两次请求。
说实话,我当时也没想明白,就先给他讲了个例子。比如说,他访问的是一个域名A的后端接口,但是他的前端页面是域名B的。按照CORS的规则,域名B发起请求到域名A时,浏览器会先发一个OPTIONS请求,这是预检请求,用来检查域名A是否允许跨域请求。
我当时说,这个OPTIONS请求就像是个侦察兵,它先去探探路,看看域名A是不是开放了跨域请求。如果域名A没有开放,那么侦察兵就会回信说“不行,你不能过来”,这时候前端就会收到一个403或者405的错误。
有意思的是,如果侦察兵探路成功,域名A允许跨域请求,那么真正的请求就会发起。这就解释了为什么有时候看起来像是两次请求,其实第一次是侦察兵,第二次才是真正的业务请求。
后来,我查了一下资料,发现这种做法其实是为了安全考虑。CORS的预检请求可以帮助前端避免因为不合法的跨域请求而导致的潜在安全问题。
CORS跨域请求两次,其实是浏览器为了安全考虑而设置的一个机制。这块儿我没亲自跑过,数据我记得是X左右,但建议你核实一下最新的规范。