当返回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地位,你期望会发生什么?