前端技术:axios
后端技术:java spring
问题:跨域问题
前后端分离第一个问题,活久见,也是预料之中,总是感觉跨域难。
第一想到的是后端进行设置,马上写了个过滤器CrossFilter
HttpServletRequest request = (HttpServletRequest) selvetRequest;
HttpServletResponse response = (HttpServletResponse) selvetResponse;
// 指定允许其他域名访问
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, GET");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "Content-Type, X-Requested-With, Accept, Origin");
chain.doFilter(selvetRequest, selvetResponse);
设置了一堆的配置:
同时也找运维哥哥加了nginx配置:
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Headers *;
add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
此时,前端小姐姐请求后出现了一个OPTIONS请求,然后无任何响应,
查看控制台发现有异常信息:
Access to XMLHttpRequest at '****' from origin 'localhost:9529' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: The 'Access-Control-Allow-Origin' header contains multiple values '*, *', but only one is allowed.
说明:这个异常信息的原因就是配置了2个导致!去掉一个就行。所以我把代码里面的filter去掉了,保留了nginx配置
去掉后,新的问题又来了!
依然还是OPTIONS响应,并且返回403.
这个问题原因是因为服务器或者代码里没有对应的OPTIONS方法
可以直接在服务器nginx中设置返回就行:
if ($request_method = "OPTIONS") {
return 204;
}
此时服务器nginx的配置如下:
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Headers *;
add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
if ($request_method = "OPTIONS") {
return 204;
}
此时再次请求,OPTIONS响应200了,但是,response依然是空,仍然还是没进到后台方法!!!
绝望啊绝望!!
百无聊奈中,发现如下内容:
axios中POST请求变成OPTIONS处理
按照文中方式处理后,总算进请求地址有post响应啦!
但是!新的问题又出现了!
接口响应500~查看日志发现,解析参数失败了~
因为上文中用到:
qs.stringify
导致入参变成”xxx=111&yyy=222”这种格式,正准备改一下后台逻辑,针对性处理这种格式,
似乎又出现了新的转机~~~
这篇文章提到了一个关键性配置:
withCredentials: false, // 允许携带cookie
一通操作猛如虎,
加了以上配置后,
接口总算可以成功请求,并且参数解析也可以了。。
本文发布于:2024-02-03 08:17:09,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170691943149788.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |