Angular5+SpringBoot项目请求报错:404及Tomcat无效Cookie问题咨询
看起来你遇到了两个关联又独立的问题,我来一步步帮你拆解解决:
一、Chrome控制台的404错误(GET http://localhost:4200/customer 404)
这个问题的核心是请求路径错误,原因很直观:
- Angular前端默认运行在
localhost:4200,而Spring Boot后端默认监听localhost:8080,你现在让前端请求自身4200端口的/customer接口,但这个接口只存在于后端的8080端口,所以必然返回404。
解决步骤:
- 修改Angular中的请求代码,把目标URL切换到后端端口,示例:
// 原错误代码(请求前端本地端口) // this.http.get('/customer') // 修改后(指向后端服务) this.http.get('http://localhost:8080/customer') - 这时候会触发跨域问题,需要在Spring Boot端开启跨域支持:
可以直接在Controller类或接口方法上添加@CrossOrigin注解:
或者配置全局跨域配置类,让所有接口都支持跨域请求。@CrossOrigin(origins = "http://localhost:4200") @RestController public class CustomerController { // 你的接口实现 }
二、Tomcat的Cookie无效警告(Invalid cookie. Value not a token or quoted value)
这个警告是因为后端设置的Cookie值不符合Tomcat遵循的RFC 6265规范,比如值包含了空格、逗号、分号这类特殊字符,或者没有用引号包裹特殊内容。
解决方法:
- 优先规范Cookie值:确保值是合法的“token”(仅包含字母、数字,以及
!#$%&'*+-.^_|~`这类允许的特殊字符)。 - 如果必须使用特殊字符,要么用引号包裹值,要么先做URL编码:
// 错误示例:值包含空格 // response.addCookie(new Cookie("user", "John Doe")); // 正确做法1:用引号包裹特殊值 Cookie cookie = new Cookie("user", "\"John Doe\""); // 正确做法2:对值进行URL编码 String encodedValue = URLEncoder.encode("John Doe", StandardCharsets.UTF_8); Cookie cookie = new Cookie("user", encodedValue); response.addCookie(cookie); - 如果你不想调整Cookie值,也可以在Spring Boot的
application.properties中切换Tomcat的Cookie处理器为更宽松的RFC标准实现:server.tomcat.cookie-processor=org.apache.tomcat.util.http.Rfc6265CookieProcessor
先按照上面的步骤调整,应该能解决这两个问题,如果还有细节卡点,可以补充代码片段再进一步排查~
内容的提问来源于stack exchange,提问作者CHARAFI Saad
相关产品推荐
相关产品推荐

