【问题标题】:java.net.SocketException: Connection reset, large HTTP headersjava.net.SocketException:连接重置,大型 HTTP 标头
【发布时间】: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


【解决方案1】:

您如何确定服务器没有拒绝请求?

HTTP 规范没有施加限制,我不相信 Apache 客户端在其默认配置中施加限制。

但是,Web 服务器确实...有关详细信息,请参阅 Maximum on http header values?。请注意,Web 服务器施加的限制是针对所有标头的组合大小,而不是单个标头。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2010-09-08
  • 2021-03-10
  • 2022-01-18
相关资源
最近更新 更多