用java的 java.net.HttpURLConnection
有一个getresponsemessage()方法来检索 Reason-Phrase
文本(由rfc2616 6.1状态行指定)。
在较新的Java11HttpClient中, java.net.http.HttpResponse
只有statuscode()方法。
有没有一种方法可以使用这个api获取状态行末尾返回的文本?如果没有,为什么没有包括在内(我知道http2没有定义这个值,但是大多数应用程序仍然使用http1.1,因为它仍然有效。)
2条答案
按热度按时间dbf7pr2w1#
有没有一种方法可以使用这个api获取状态行末尾返回的文本?
不。
如果没有,为什么没有包括在内?
因为文本通常被客户忽略(忍受我……)
因为文本很少包含有用的内容。它通常只是与响应代码相对应的标准(推荐)文本消息(一个被忽视的原因)
因为如果一个web应用程序要提供一个有意义的解释,它很可能在有效负载中这样做(因为1。但也加强了这一点。)
因为有些web堆栈不允许web应用设置原因文本。
因为一些http1.1web服务器通常会完全忽略原因文本(例如,对于Tomcat8.0.x,没有消息,而对于Tomcat8.5.x,有一个启用消息的选项。)
(我知道HTTP2没有定义这个值,但大多数应用程序仍然使用HTTP1.1,因为它仍然有效。)
这实际上是(新的)web应用程序不尝试在原因文本中传递有用信息,也不支持在api中传递有用信息的另一个原因。
鉴于上述情况,如果你让你的客户代码取决于看到具体的原因文本。。。或者看到任何。。。然后,它很容易打破一些网络服务器。
因此,我想说Java11的httpclient api设计人员没有向客户端代码公开原因文本,这对我们大家都是一个很大的帮助。
你可以不同意。。。并使用其他http客户端库。
我的建议是顺其自然。如果不尝试使用原因文本(客户端或服务器端),那么就不必处理使用它会带来的问题。问题只会变得更糟。
chhkpiq42#
当你注意到
HttpResponse
不提供任何api来获取原因短语。没有隐藏的方法可以得到它。您是否有一个用例,其中在HttpResponse
会有用吗?