簡體   English   中英

當服務器使用HttpClient-4發送錯誤時,中止HTTP PUT請求

[英]Abort HTTP PUT request when server sends an error with HttpClient-4

我使用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的一面,看看是否可以中止請求,但似乎不可能

有沒有辦法在這種情況下取​​消上傳流?

任何見解將不勝感激。

謝謝

這個問題的正確解決方案是在客戶端打開所謂的'expect:continue'握手。 較新版本的Apache HttpClient 4.x默認情況下禁用它。

您可以關閉服務器端的InputStream,它將停止傳輸。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM