当返回1xx状态码时,Spring引导请求挂起
我有一个小的演示来玩定制的状态码。
有趣的部分是,如果状态低于200,请求将始终挂在那里,如105,199等。但对于任何超过200的状态,如209,789等
http状态码注册表,请参考https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml
Spring引导:1.5.4.RELEASE与嵌入式的tomcat
Java:8
控制器:
@RestController public class DemoController { @GetMapping("/hello") public ResponseEntity get() { return ResponseEntity.status(105).build(); } }
任何人都可以给我一个明确的解释?
我在这里创建一个要点: https : //gist.github.com/pengisgood/dbea1fcdc45c2bb5809871c7f020b800
更新:
我也创建一个小的演示来重现它在这里: https : //github.com/pengisgood/springboot-customize-status-code
更新:
运行curl -v localhost:8080/hello
,可以看到状态,但是响应没有完成。 参考下面的gif:
据我所知,Spring DispacherServlet
以完全相同的方式处理不同的返回码。 我认为发生的事情是卷曲只是让连接打开,因为响应是在1xx
范围内。
本文为状态码提供了一个很好的入门知识。 这句话特别重要:
100-199在100年代的代码是信息性的,表明客户应该采取一些其他的行动。
如果使用--trace
运行curl
,则会看到105
响应确实到达:
curl -v -trace http://localhost:8080/hello Trying ::1... TCP_NODELAY set Connected to localhost (::1) port 8080 (#0) > GET /hello HTTP/1.1 > Host: localhost:8080 > User-Agent: curl/7.54.0 > Accept: */* > < HTTP/1.1 105 < Date: Tue, 19 Sep 2017 18:07:04 GMT ^C
所以我认为发生的是响应返回,客户端应该采取一些其他行动(但不),所以看起来像事情已经挂起。
这里真正的问题可能是你为什么要回到105
地位,你期望会发生什么?