HttpClient整体执行流程分析

在java 世界,似乎apache httpClient已然成为http请求事实标准,在各种开源和商业项目中只要涉及到http请求的地方,都能看到它的身影。
如此重要的核心组件,是非常有必要了解它的核心原理的。在了解各个细节之前,我们先来看下httpClient的整体执行流程。

这里的代码分析是基于httpClient3.1版本

httpClient整体执行流程

从上面的执行流程来看,httpClient在执行http方法时是通过HttpMethodDirctor来做的。整个请求的执行基本上都是下面的流程。


execute流程

从上面的流程来看,httpClient会先使用ConnectionManager获取connection,connectionManager的不同实现的差别,在HttpClient ConnectionManager会详细介绍。获取connection后进行authenticate,这里的authenticate 就是http协议的中的身份验证。httpClient支持三种验证方式:NTLM、Digest、Basic。这三种验证方式的差别,后续在单独的文章中再详细讲解。

对于execute,就是在循环中执行httpMethod的execute方法,如果执行成功,则跳出循环;如果出现IOException,就会使用retryHandler.retryMethod来检查是否超过执行次数,如果超过了则会抛出异常。

对于redirct比较好理解,就是对重定向的处理,如果response statusCodes是302、301、303、307中的一种,并且httpMethod设置了followRedirects=true,则httpClient则会从响应头中的location字段获取重定向的目的url,将当前method的uri设置为redirectURI。

releaseConnection从表面上理解就是释放连接,httpConnection的releaseConnection会由httpConnectionManager.releaseConnection来执行,最终走到ConnectionPool的freeConnection。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容