HttpClient异常处理
HttpClient 能够抛出两种类型的异常:在 I/O 失败时,如套接字连接超时或被重置的java.io.IOException 异常,还有标志 HTTP 请求失败的信号,如违反 HTTP 协议的HttpException 异常。通常 I/O 错误被认为是非致命的和可以恢复的,而 HTTP 协议错误则被认为是致命的而且是不能自动恢复的。 一、HTTP运输安全 要理解 HTTP 协议并不是对所有类型的应用程序都适合的,这一点很重要。HTTP 是一个简单的面向请求/响应的协议,最初被设计用来支持取回静态或动态生成的内容。它从未向支持事务性操作方向发展。比如,如果成功收到和处理请求,HTTP 服务器将会考虑它的其中一部分是否完成,生成一个响应并发送一个状态码到客户端。如果客户端因为读取超时,请求取消或系统崩溃导致接收响应实体失败时,服务器不会试图回滚事务。如果客户端决定重新这个请求,那么服务器将不可避免地不止一次执行这个相同的事务。在一些情况下,这会导致应用数据损坏或者不一致的应用程序状态。尽管 HTTP 从来都没有被设计来支持事务性处理,但它也能被用作于一个传输协议对关键的任务应用提供被满足的确定状态。要保证 HTTP 传输层的安全,系统必须保证 HTTP 方法在应用层的幂等性。 二、终止请求 在一些情况下,由于目标服务器的高负载或客户端有很多活动的请求,那么 HTTP