【发布时间】:2017-04-19 23:13:14
【问题描述】:
我正在使用
org.apache.http.impl.client.CloseableHttpClient
发送请求。只要其中一个标头的大小很大(大约103452 字节),我就会得到:
java.net.SocketException:连接重置
服务器可能没有重置连接,因为来自其他 java 应用程序的其他客户端(可能使用 spring OAUTH/REST 客户端)似乎能够在发送类似大的标头时使用该服务。
尽管正确的解决方法是首先避免发送如此大的标头,但是否有 org.apache.http.impl.client.CloseableHttpClient 的配置可以防止它在大标头上崩溃?
客户端是用:
HttpClientBuilder.create().useSystemProperties().build()
【问题讨论】:
-
您如何确定服务器没有拒绝请求? HTTP 规范没有施加限制,我不相信 Apache 客户端在其默认配置中施加限制。但是,Web 服务器确实...有关详细信息,请参阅 stackoverflow.com/questions/686217/…。请注意,Web 服务器施加的限制是针对所有标头的组合大小,而不是单个标头。
-
好点。我会确认
-
您能否添加您的评论作为答案?我尝试将请求发送到本地服务器:
sudo nc -l 80。带有 100Kb 标头的请求由 apache http 客户端发送得非常好。同时,我尝试通过curl客户端向真实服务器发送相同的请求,我得到了curl: (56) Proxy CONNECT aborted。因此,即使是代理也可能会拒绝如此大的标头大小。
标签: java http-headers apache-httpclient-4.x spring-oauth2