一、问题描述:
报错信息
has been blocked by CORS policy: Response to preflight request doesn't pass
且发现同一个请求,在浏览器上请求了两次。
二、问题原因
has been blocked by CORS policy: Response to preflight request doesn't pass a***ess control check
这个错误是添加完CorsFilter之后发生的错误,咋一看好像CorsFilter没有生效,其实CorsFilter生效了,而且通过log可以看出postman调用只调用一次,谷歌浏览器调用会调用两次,原因是谷歌浏览器在有跨域(CORS)请求时,会先发送一个preflight(预检)请求,之后才会发送fetch请求。
问题:虽然前端只调用了一次接口,但是浏览器会发送两次请求,第一次是preflight请求,之所以会发这个请求是为了保证当前调用接口的有效性,避免资源浪费,确保有效链接。服务端在处理接口的时候直接按照客户端的fetch请求处理,并没有对preflight请求处理,返回了前端400。
解决办法:服务端对preflight请求和fetch请求做不同处理,两个请求不能走同一套逻辑,因为preflight请求不会携带request参数过去,只有fetch请求才会携带request。即在CorsFilter中增加代码:
原文链接:https://blog.csdn.***/u012643122/article/details/126724361
三、解决办法:
解决django跨域请求
django笔记-解决django跨域请求_django关闭跨域_simpleyako的博客-CSDN博客