相关疑难解决方法(0)

Apache HttpClient 4.x在上传较大文件时表现得很奇怪?

我正在使用java(和scala)开发和测试一个简单的直接客户端 - 服务器应用程序.

服务器是基于com.sun.net.httpserver.HttpServer并允许文件上传通过使用POST和PUT操作的基本RESTful接口.使用我们自己实现的摘要式身份验证限制上传操作,经过测试并在浏览器中工作,卷曲和Apache HttpClient.

上传客户端包裹Apache HttpClient 4.1.2并执行放完了HTTP操作来上传文件的实体.文件的内容类型application/xml在标题中指定,一次只上载一个文件.

上传不同大小的文件时,可能会出现奇怪的行为:

  • 大小小于或等于1.076.006字节的文件已成功上载 .
  • 文件与尺寸大于或等于1.122.158字节 失败java.net.SocketException: Broken pipe.

(确切的临界尺寸未知,因为我手动创建了不同尺寸的文件以接近最大工作尺寸)

管道损坏的原因是,客户端以某种方式忽略了www-authenticate响应的上传文件,如服务器日志所记录的那样."忽略"意味着它只发送多个(4)消息,根本不包含认证头.但是较小的文件运行良好,并且客户端在响应之后立即正确地发送具有适当质询 - 响应的身份验证请求www-authenticate.

上传工作卷曲与各种大小的文件,所以没有问题.

所以在这一点上,人们可以说:"你的客户端存在一些错误." 好吧,我有点希望如此,但我也尝试过一个开源的java RESTclient(也包装apache httpclient),它有完全相同的行为!

我们通过互联网使用这个客户端尝试了它,它也和描述的相同.所以现在,我只是希望我错过了设置一些重要的Apache HttpClient导致这种错误行为的东西,而开源RESTclient的开发者也错过了它......任何想法都可能会很棒!

java apache file-upload httpclient digest-authentication

4
推荐指数
1
解决办法
2815
查看次数