Chrome浏览器中Zuul路由重定向异常问题求助
Chrome下Zuul转发URL重复添加HTTPS前缀导致请求失败的解决方案
问题根源
Chrome与Edge对请求头的处理逻辑存在差异,Zuul网关转发时重复读取了X-Forwarded-Proto这类协议头信息,最终拼接出https,https://<IP>/abc/def/xyz这种非法URI格式;再加上本地服务器使用的Spring Web 4.2.5版本过于老旧,无法正确解析这种异常格式的URI,从而抛出错误。
修复方案
1. 调整Zuul配置,清理重复协议头
通过配置禁用不必要的代理头转发,或者自定义过滤器清理重复的协议信息:
- 配置文件方式:
zuul: add-proxy-headers: false ignored-headers: X-Forwarded-Proto
- 自定义Zuul前置过滤器:
@Component public class CleanDuplicateProtoFilter extends ZuulFilter { @Override public String filterType() { return "pre"; } @Override public int filterOrder() { return 1; } @Override public boolean shouldFilter() { return true; } @Override public Object run() throws ZuulException { RequestContext ctx = RequestContext.getCurrentContext(); HttpServletRequest request = ctx.getRequest(); String protoHeader = request.getHeader("X-Forwarded-Proto"); if (protoHeader != null && protoHeader.contains(",")) { String validProto = protoHeader.split(",")[0].trim(); ctx.addZuulRequestHeader("X-Forwarded-Proto", validProto); } return null; } }
2. 升级本地服务器的Spring Web版本
本地服务器的Spring Web 4.2.5版本是多年前的旧版本,建议升级到与后端Spring Boot 2.6.7匹配的Spring Web 5.3.x版本,新版本对URI解析的容错性更强,能避免这类非法格式导致的报错。
3. 排查前端请求头差异
用Chrome开发者工具查看请求头,对比Edge的请求头,确认是否Angular前端在Chrome环境下会额外添加重复的协议头。如果是前端问题,调整请求拦截器或URL构建逻辑,确保请求头的一致性。
内容的提问来源于stack exchange,提问作者Sanny Pathak
相关产品推荐
相关产品推荐

