vue+springboot项目,跨域已经解决,但能否成功访问controller具有偶然性,多次刷新就可以成功,是为什么呢?
项目本身采用vue框架作为前端,springboot作为后端,登陆系统采用了SpringSequrity框架,在登陆验证时添加响应头作为解决跨域的方式。
后端解决跨域问题代码:
@Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {
// 获取token, 并检查登录状态
SecurityUtils.checkAuthentication(request);
//
response.addHeader("Access-Control-Allow-Origin", "*");
response.addHeader("Access-Control-Allow-Credentials", "true");
response.addHeader("Access-Control-Allow-Methods", "*");
response.addHeader("Access-Control-Allow-Headers", "*");
response.addHeader("Access-Control-Max-Age", "16800");
chain.doFilter(request, response);
}
问题一:
在前端打包整合进后端的static下之后,启动后端,第一次登陆时总会报403错误,但是多刷新就好了。
检查成功的请求和非成功的请求,发现报403错误的请求响应头中多了如下两个:
Origin: http://localhost:8001Content-Length: 0
问题二
在项目使用过程中,多次发生点击一次报403错误,但是多点击几次就成功了,不知道原因是为何?
回答:
我猜哈,可能就是Content-Length: 0
的问题,tomcat可能一次性读取到多个请求的数据,又由于http请求的请求体与下一个请求的请求方式是可以连在一起的,所以需要Content-Length
去标识这个请求体的具体数据量。如果为0,那么tomcat就不获取请求体了,把上一个的请求体也算作下一个请求的请求方式,那么就可能报错。
以上是 vue+springboot项目,跨域已经解决,但能否成功访问controller具有偶然性,多次刷新就可以成功,是为什么呢? 的全部内容, 来源链接: utcz.com/p/935424.html