Angular 13与SpringBoot代理失效,跨域请求遇CORS问题求助
Angular代理未生效导致CORS错误的排查与解决
核心问题
你的Angular代理未生效的根本原因是请求直接硬编码了后端地址http://localhost:8080,没有通过Angular开发服务器的代理转发,因此浏览器依然检测到跨域请求,触发CORS拦截。
问题分析
查看people.service.ts中的API拼接逻辑:
private readonly API = `${environment.apiUrl}${environment.baseUrl}/people`;
这里environment.apiUrl是http://localhost:8080,最终请求地址会是http://localhost:8080/api/people/checks,直接跨域访问后端,完全绕过了Angular的代理服务器(http://localhost:4200),所以代理配置根本没起作用。
修正步骤
1. 修改环境配置,让请求走代理
修改environment.ts,将apiUrl设为空字符串,让请求默认发向Angular服务器地址:
// environment.ts export const environment = { production: false, // 开发环境建议设为false,避免混淆生产配置 apiUrl: '', username: 'danilo', password: '35bf85fe-c672-4d06-8cff-4485ed89211a', baseUrl: '/api' };
此时API拼接后会生成/api/people/checks,请求会自动发向http://localhost:4200,再由代理转发到后端http://localhost:8080。
2. 验证代理是否生效
启动Angular项目时,查看控制台输出,若代理生效,会出现类似以下的debug日志:
[HPM] Proxy created: /api -> http://localhost:8080
如果没有这类日志,检查angular.json中的代理配置路径是否正确(你的配置是src/proxy.conf.mjs,确认文件位置无误),同时确保启动时使用的是development配置(你的defaultConfiguration已设为development,ng serve默认会加载该配置)。
关于SpringBoot的CORS配置
- 当使用Angular代理时,后端不需要额外配置CORS:代理服务器与后端的通信属于服务器间请求,不受浏览器CORS政策限制,浏览器仅会检测请求是否发向同源的Angular服务器(4200)。
- 你之前在控制器添加CORS注解后请求正常,是因为此时请求直接跨域访问后端,后端返回了
Access-Control-Allow-Origin头,浏览器允许了该跨域请求,但这并非代理生效的结果。
额外检查点
- 确认
proxy.conf.mjs格式正确:Angular 16+支持.mjs格式的代理配置,你的数组形式配置合法。 - 如果后端接口没有
/api前缀,再取消注释pathRewrite: { '^/api': '' }配置。
内容的提问来源于stack exchange,提问作者Danilo Rodrigues
相关产品推荐
相关产品推荐

