HttpClient源码解析系列:第一篇:总览

时间:2024-04-14 13:47:31
Http, tcp/ip和socket区别
    Tcp/ip是传输层协议,而http则是建立在它之上的上层应用协议。Http聚焦在数据规范层面,tcp/ip则主要解决数据传输层面。建立在tcp/ip上的应用协议很多,像rpc,ftp等。
    Socket则是tcp/ip的一个编程实现,封装了传输层的众多细节,从而让协议层可以关注协议本身的处理而不用关注底层传输。在程序里http请求(连接)最终一定需要绑定到一个具体的socket连接进行上行和下行传输。
    关于Socket可以参考:http://blog.****.net/hguisu/article/details/7445768/ 【 Linux的SOCKET编程详解】

HttpClient(当前版本 4.5.3
核心接口:HttpClient
HttpClient源码解析系列:第一篇:总览
全是执行方法,即传进来一个请求实例,然后执行拿到结果。

其实现类只有三个
HttpClient源码解析系列:第一篇:总览
    其中AutoRetryHttpClient 和 DecompressingHttpClient 都被标记为 Deprecated ( Since 4.3 )。从 4.3 开始建议使用HttpClientBuilder(@since 4.3)。而主要使用的即使 CloseableHttpClient。

    再看CloseableHttpClient,可以看到,也只有三个实现。 
    HttpClient源码解析系列:第一篇:总览
    其中的 AbstractHttpClient 也被标记为 Deprecated(Since 4.3)。
HttpClient源码解析系列:第一篇:总览
    而剩下的两个MinimalHttpClient 和 InternalHttpClient。其中 MinimalHttpClient 是一个极简版的实现,是核心设计的最直接简单的提现。而 InternalHttpClient 则是一个完全可配置版本,提供最丰富完善的功能。
    HttpClients 是一个工厂类,专门生产各种HttpClient和Builder。而HttpClientBuilder用于生成 InternalHttpClient,让配置更加规范易用。
    
补充:
    InternalHttpClient是一个非常有意思的类,它不是Public的,是 CloseableHttpClient 的一个实现,只能通过HttpClientBuilder来生成。而InternalHttpClient的生成过程又依赖了其他的多个非公开类,也就是说,InternalHttpClient 很难支持继承之后重写这样的定制开发方式(除非你把依赖的非公开类都拷贝出来)。这也算是充分利用Java特性维持对象的可控,这些核心的类本身,对于不是特别理解源码的人,直接继承修改,确实可能带来各种问题。