Golang向Spring Boot发起重定向后请求重复问题求助
重定向链路中的重复请求异常
场景描述
我在实现「Golang应用→Spring Boot控制器→Golang指定端点」的两次重定向链路时,遇到了异常:Golang发起5次重定向,但Spring Boot端收到了10次请求,每个请求的counter值都重复出现两次。
代码片段
Golang重定向代码
u.counter++ // 初始值为0,每次重定向前自增 u.logger.Printf("sending redirect number: "+strconv.Itoa(u.counter)) http.Redirect(w, r, "http://myspringboot.app/api/mycontroller?param=" + param + "&counter=" + strconv.Itoa(u.counter), 302)
Spring Boot控制器代码
@GetMapping("/mycontroller") public void getRedirect( HttpServletResponse httpServletResponse, @RequestParam("param") String param, @RequestParam("counter") String counter ) { System.out.println("param: " + param + " counter: " + counter); httpServletResponse.setHeader("Location", "https://mygolang.app/endpoint?param=" + param); httpServletResponse.setStatus(302); }
日志现象
- Golang端日志(正常输出5次):
sending redirect number: 1 sending redirect number: 2 sending redirect number: 3 sending redirect number: 4 sending redirect number: 5
- Spring Boot端日志(收到10次重复请求):
param: somevalue counter: 1 param: somevalue counter: 2 param: somevalue counter: 1 param: somevalue counter: 2 param: somevalue counter: 3 param: somevalue counter: 3 param: somevalue counter: 4 param: somevalue counter: 4 param: somevalue counter: 5 param: somevalue counter: 5
关键排查线索
如果移除Spring Boot控制器中的以下两行重定向代码:
httpServletResponse.setHeader("Location", "https://mygolang.app/endpoint?param=" + param); httpServletResponse.setStatus(302);
Spring Boot控制器就能正常收到5次请求,无重复情况。
环境信息
- 两个应用均部署在AWS ECS,各分配独立任务
- Golang应用使用HTTPS协议,Spring Boot最初用HTTP,添加ACM证书后问题仍存在
- 浏览器表现:Chrome中必现重复请求,Edge中重复次数不定
- 额外说明:Golang的
/endpoint端点与发起重定向的HTTP处理器完全独立
有没有人遇到过类似的问题?
内容的提问来源于stack exchange,提问作者mangusta
相关产品推荐
相关产品推荐

