我正在使用java(和scala)开发和测试一个简单的直接客户端 - 服务器应用程序.
该服务器是基于com.sun.net.httpserver.HttpServer并允许文件上传通过使用POST和PUT操作的基本RESTful接口.使用我们自己实现的摘要式身份验证限制上传操作,经过测试并在浏览器中工作,卷曲和Apache HttpClient.
在上传客户端包裹Apache HttpClient 4.1.2并执行放完了HTTP操作来上传文件的实体.文件的内容类型application/xml在标题中指定,一次只上载一个文件.
上传不同大小的文件时,可能会出现奇怪的行为:
java.net.SocketException: Broken pipe.(确切的临界尺寸未知,因为我手动创建了不同尺寸的文件以接近最大工作尺寸)
管道损坏的原因是,客户端以某种方式忽略了www-authenticate响应的上传文件,如服务器日志所记录的那样."忽略"意味着它只发送多个(4)消息,根本不包含认证头.但是较小的文件运行良好,并且客户端在响应之后立即正确地发送具有适当质询 - 响应的身份验证请求www-authenticate.
上传工作卷曲与各种大小的文件,所以没有问题.
所以在这一点上,人们可以说:"你的客户端存在一些错误." 好吧,我有点希望如此,但我也尝试过一个开源的java RESTclient(也包装apache httpclient),它有完全相同的行为!
我们通过互联网使用这个客户端尝试了它,它也和描述的相同.所以现在,我只是希望我错过了设置一些重要的Apache HttpClient导致这种错误行为的东西,而开源RESTclient的开发者也错过了它......任何想法都可能会很棒!