跨域问题在我们实际开发中前后端分离项目中会经常碰到。一般就是加个跨域注解,或者增加全局配置来解决。但今天说说项目中碰到的一种跨域的形式。
首先我们要了解请求可以分为两种请求:简单请求,非简单请求。
重点是非简单请求,什么是非简单请求?如果一个请求是跨域请求,然后它有自定义的请求头(比如带了token),或者请求头中的content-type是application/x-www-form-urlencoded,multipart/form-data,text/plain之外的格式。这些就是非简单请求。
非简单请求在请求前会先发出一个options请求去校验一下。这个时候,我们加的跨域注解或者跨域配置文件,会帮我们自动做一些操作。具体的比如往head里插入一些对应字段来标识这是允许跨域访问的信息。
这个时候出问题了,项目中往往我们会用过滤器去检验身份。而options请求里是不会带token的,自然而然的走身份校验失败的逻辑,而浏览器根据options请求的结果去判断,发现head里没有所约定的字段,就会报跨域问题,然后你去看对应接口,发现有跨域注解,然后就莫名其妙的。相信大家看到这里也知道为什么会报跨域了。
解决方法也很简单,在拦截那里加了行判断,如果是options请求就直接放行,这样请求就会到接口里去,接口的跨域注解会自动帮我们做处理。
ps:注意大小写和单词