一、问题描述:

报错信息

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 access control check

这个错误是添加完CorsFilter之后发生的错误,咋一看好像CorsFilter没有生效,其实CorsFilter生效了,而且通过log可以看出postman调用只调用一次,谷歌浏览器调用会调用两次,原因是谷歌浏览器在有跨域(CORS)请求时,会先发送一个preflight(预检)请求,之后才会发送fetch请求。
 

问题:虽然前端只调用了一次接口,但是浏览器会发送两次请求,第一次是preflight请求,之所以会发这个请求是为了保证当前调用接口的有效性,避免资源浪费,确保有效链接。服务端在处理接口的时候直接按照客户端的fetch请求处理,并没有对preflight请求处理,返回了前端400。

解决办法:服务端对preflight请求和fetch请求做不同处理,两个请求不能走同一套逻辑,因为preflight请求不会携带request参数过去,只有fetch请求才会携带request。即在CorsFilter中增加代码:

原文链接:https://blog.csdn.net/u012643122/article/details/126724361

三、解决办法:

解决django跨域请求

django笔记-解决django跨域请求_django关闭跨域_simpleyako的博客-CSDN博客

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐