post请求application/json请求跨域问题

项目场景:

提示:前后端分离项目,前端使用vue+axios配置


问题描述

提示:application/json请求头时前端出现跨域错误
跨域错误

请求需带上cookie,axios.defaults.withCredentials = true已配置

axios.defaults.withCredentials = true;
axios.defaults.headers = {
    'Content-Type' : 'application/json;charset=UTF-8',
}

原因分析:

application/json请求时,会发送两个请求,第一个为“预检”请求,类型为options。浏览器先询问服务器,当前网页所在的域名是否在服务器的许可名单之中,以及可以使用哪些HTTP动词和头信息字段。只有得到肯定答复,浏览器才会发出正式的XMLHttpRequest请求,否则就报错。

而这个“预检”请求中,是不会携带cookie的,因此服务端如果没有做特殊处理,就会去检查“预检”请求中的cookie,如果发现没有,则直接提示未登录,这样就有问题了。


解决方案:

解决方法可以是在后端代码中,遇到OPTIONS请求,先放行,然后再第二次正式的post请求中,则再去对用户鉴权。

if(“OPTIONS”.equals(request.getMethod())){
return true;
}


版权声明:本文为weixin_44271874原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。