有没有办法使用此 API 获取在状态行末尾返回的文本?
不。
如果没有,为什么不包括在内?
由于详细的设计原理尚未公布,我们无法告诉您实际原因。
但是,我想原因/推理是这样的:
因为客户通常会忽略文本。(忍受我...)
因为文本很少包含任何有用的东西。它通常只是对应于响应代码的标准(推荐)文本消息。(这是客户经常忽略文本的原因之一。)
因为如果 Web 应用程序要提供有意义的解释,它很可能会在有效负载中进行。(因为1。但也加强了它。)
因为一些网络堆栈不让网络应用程序设置原因文本。
因为一些 HTTP 1.1 Web 服务器通常会完全忽略原因文本!(例如,Tomcat 8.0.x 没有消息,而 Tomcat 8.5.x 有一个启用它的选项。)
(我知道 HTTP 2 没有定义这个值,但大多数应用程序仍然使用 HTTP 1.1,它仍然有效。)
现在是... 1。
这实际上是(新)Web 应用程序不尝试在原因文本中传递有用信息并且在 API 中不支持它的另一个原因。
最终,大多数应用程序将使用 HTTP 2 或更高版本。或者至少,足够多的人使用它,依靠对 HTTP 1.x 特性的良好支持可能会给您的应用程序带来问题。
请记住,HTTP 3 现在正在筹备中。没有人能看到足够远的未来来准确预测在(比如说)5 年内有多少 Web 服务器将使用什么版本的 HTTP。
1 - 服务器端采用率呈上升趋势,但因服务器平台而异。有关一些数据点,请参阅2020 年网络年鉴。
鉴于上述情况,如果您让您的客户端代码依赖于查看特定原因文本......或者根本没有看到任何......那么它可能会破坏某些 Web 服务器。
因此,我想说 Java 11 的 HttpClient API 设计者帮了我们一个大忙,没有将原因文本暴露给客户端代码。
您可以不同意……并使用其他 HTTP 客户端库。
我的建议是顺其自然。如果您不尝试使用原因文本(客户端或服务器端),那么您将不必处理使用它会带来的问题。问题只会变得更糟。