当服务器使用HttpClient-4发送错误时,中止HTTP PUT请求

时间:2012-08-24 08:45:21

标签: java tomcat apache-httpclient-4.x

我正在使用httpclient-4使用以下代码将流的内容(在这种情况下是一个巨大的文件)发送到我的Tomcat上传servlet:

HttpRequest httpRequest = new HttpPut(destination);
InputStreamEntity entity = new InputStreamEntity(inputStream, contentLength);
((HttpPut)httpRequest).setEntity(entity);
httpClient.execute(httpRequest,handler);

工作得很好。后来我添加了一种认证机制,以防止未经授权的用户上传文件。如果有人尝试上传而未经过身份验证,则servlet会直接以

响应
response.sendError(HttpServletResponse.SC_FORBIDDEN)

甚至没有处理请求的InputStream。

我面临的问题是,尽管请求在服务器端被拒绝,但我的客户端仍然不断发送InputStream的全部内容,导致网络使用完全无用。

我查看了httpclient的文档,但遗憾的是没有找到关于这一点的任何内容。我也查看了tomcat的一面,看看是否可以中止请求,it doesn't seem possible

有没有办法在这种情况下取​​消上传流?

任何见解都将受到赞赏。

由于

2 个答案:

答案 0 :(得分:3)

解决这个问题的正确方法是在客户端打开所谓的'expect:continue'握手。较新版本的Apache HttpClient 4.x默认情况下禁用它。

答案 1 :(得分:1)

您可以关闭服务器端的InputStream,它将停止传输。