okhttp简介-学习笔记

1. 介绍

okHttp技术已被Android4.4之后纳入HttpURLConnection底层通信库,重要性不言而喻。
okhttp对网络通信中的通信协议,数据解析,I/O,缓存,并发请求实现了良好的策略,并拓展和支持了Application/NetWork拦截,HTTP2协议,数据ZIP压缩等功能。HTTPS其实是有两部分组成:HTTP + SSL / TLS

2. 通信

2.1 SSL/TLS加密: 保证数据传输的安全。
方法:客户端先向服务器端索要公钥,然后用公钥加密信息,服务器收到密文后,用自己的私钥解密。双方会通过通信中的几个随机随机数生成对称机密的“对话密钥”。对话密钥用户加密传输的数据,RSA公钥和私钥是为了验证各自的身份。通过两轮共四次握手确定了各自身份和加密方法。参考

SSL(Secure Socket Layer,安全套接字层):位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层。
TLS(Transport Layer Security,传输层安全协议):用于两个应用程序之间提供保密性和数据完整性。
区别:TLS建立在SSL 3.0协议规范之上,是SSL 3.0的后续版本。在TLS与SSL3.0之间的差别主要是它们所支持的加密算法不同。参考

公钥、私钥 的解释

公钥 :用于向外发布,任何人都能获取,
私钥 :要自己保存,切勿给别人

一下两种情况经常有人弄混,一定要理解。

情况1:公钥用于【加密】, 私钥用于【解密】
如果加密密钥是公开的,这用于客户给私钥所有者上传加密的数据,这被称作为公开密钥加密(狭义)。
例如,网络银行的客户发给银行网站的账户操作的加密数据。HTTPS 等。

情况2:公钥用于【解密】,私钥用于【加密】
如果解密密钥是公开的,用私钥加密的信息,可以用公钥对其解密,用于客户验证持有私钥一方发布的数据或文件是完整准确的,接收者由此可知这条信息确实来自于拥有私钥的某人,这被称作数字签名,公钥的形式就是数字证书。例如,从网上下载的安装程序,一般都带有程序制作者的数字签名,可以证明该程序的确是该作者(公司)发布的而不是第三方伪造的且未被篡改过(身份认证/验证)。

2.2 SOCKET通信
传输层的TCP是基于网络层的IP协议的,而应用层的HTTP协议又是基于传输层的TCP协议的,而Socket本身不算是协议,它只是提供了一个针对TCP或者UDP编程的通信API。Socket除非主动断开否则可保持长连接,HTTP1.0短连接,HTTP1.0的长连接有时限。HTTP通信服务可使用sockets实现。参考

3. I/O : Okio库

  1. Okio作为OkHttp使用的I/O接口,实现对文件/字符流/字节流等的读写的良好封装,使得通过sink()souce()即可进行数据读写。
  2. i/o流向
    sink -> socket/File
    Source <- socket/File

4. HTTP Interceptor图

httpInterceptor图

5. 通信Platform

OkHttp的最底层是Socket
okhttp//实现HTTP协议
framwork//JRE,实现JDK中Socket封装
jvm//JDK的实现,本质对libc标准库的native封装
bionic//android下的libc标准库
ystemcall//用户态切换入内核
kernel//实现下协议栈(L4,L3)与网络驱动(一般是L2,L1)

6. 连接池的自动清理CleanUp

okhttp使用了类似于引用计数法标记擦除法的混合使用,当连接空闲或者释放时,StreamAllocation的数量会渐渐变成0,从而被线程池监测到并回收,这样就可以保持多个健康的keep-alive连接

7. HTTP缓存策略

okHttp缓存策略可通过Header中设置Expires/Cache-Control/ETag/Last-Modified等设置。Expires/Cache-Conrol确定是否进行网络资源获取,ETag(if-not-match)/Last-Modified(if-modified-since)确定网络请求是否从代理CDN缓存中获取。


HTTP缓存策略

8. HTTP缓存的存储策略

缓存使用DiskLruCache结构管理缓存文件FileSystem,DiskLruCache内部使用LinkHashMap进行LRU算法实现。在缓存文件清理策略上使用LRU算法,以线程池进行缓存的自动清理。

扩展
LinkHashMap可以保持有序(插入顺序/LRU访问顺序)是因为内部维护了一个双向链表。

9. OKHTTP线程队列

OkHttp线程池可通过缓存和阈值控制CPU工作量。
采用Dispatcher分发技术与线程池配合,实现单生产者多消费者模式下的高并发低阻塞。
使try/finally减少使用采用wait/notify减少了编码复杂性和出错率。


1

10. 引用

Okio
OkHttp解析
OkHttp解析2

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,423评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,147评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,019评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,443评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,535评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,798评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,941评论 3 407
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,704评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,152评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,494评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,629评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,295评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,901评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,742评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,978评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,333评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,499评论 2 348

推荐阅读更多精彩内容