【问题标题】:Uploading large files leads to NoHttpResponseException上传大文件导致 NoHttpResponseException
【发布时间】:2016-03-28 20:04:23
【问题描述】:

我有一个 J2EE 应用程序,它有一个允许上传文件的 REST 端点。该应用程序部署在 linux 服务器中的 jboss 上。

当我们服务器中的文件小于 4 mb 时,一切都很好,但是当我上传一个大文件时,我总是以:

org.apache.http.NoHttpResponseException: The target server failed to respond

当我在本地进行测试时(REST 客户端调用在我的机器上运行的本地服务器),一切都运行良好。我什至可以上传高达 10mb+,没有遇到任何异常。但是当我通过 REST 客户端访问 linux 服务器并且文件大于 4mb 时,我会得到 NoHttpResponseException。我尝试通过 curl 命令在 linux 服务器本身内调用上传端点,并且它正在工作。

所以,我猜这不是我的代码或 jboss 设置中的特定内容,而是 linux 服务器上的问题/配置(可能是服务器超时设置?)?谁能指出我正确的方向?

感谢所有帮助。如果您需要更多信息,请告诉我。谢谢!

【问题讨论】:

  • 您是否设置了 Connection: keep-alive 标头并设置了超时时间?
  • 当您说您使用 curl 在 Linux 服务器中调用了上传端点时,是否附加了超过 4MB 的有效负载(POST 数据)?或者,检查端点是否通过 HTTP 响应只是一个简单的 curl?
  • 能否提供初始化http客户端的代码?因为默认客户端设置了默认超时,当它们没有被更改时,超时后的连接被标记为陈旧并被清理
  • 可能上传文件大小有限试试 51200005120000大小> 在 web.xml 中

标签: linux jboss server connection-timeout


【解决方案1】:

如果您告诉我们通过本地 curl 进行的大型上传在您的服务器上都可以正常工作,这很可能是由于您的服务器和执行大型上传的远程客户端之间的某些网络设备或配置和本地开发环境。

由于您没有在应用程序代码之外描述您的设置,因此我们无法提供其他帮助:

  1. 您是否在请求上设置了keep-alive,并确保所有负载均衡器和类似设备都尊重请求持续时间/不终止 TCP?基于 HTTP 的网络设备极不可能没有 Request Timeout 响应,因此请查找 TCP 问题。
  2. 您是否已验证本地计算机上没有硬性的、按时间顺序排列的超时设置?您似乎不太可能收到来自 HTTP 服务器的 Request Timeout 的 NO 响应,但也可能是这样。
  3. 您是否能够从远程位置验证较小的请求是否有效?如果没有,那么它甚至可以很简单:
    (A) 服务器上缺少状态防火墙规则
    (B) 您没有绑定到正确的网络接口,例如服务器上的0.0.0.0,并且仅在环回/本地接口上
    (C) 出站传输的无状态规则错误,例如缺少网络 ACL 规则:入站但没有出站

【讨论】:

    猜你喜欢
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 2018-05-21
    • 1970-01-01
    • 2011-03-27
    • 1970-01-01
    • 1970-01-01
    • 2015-05-31
    相关资源
    最近更新 更多