OkHttp系列文章(六) - OkHttp的5個(gè)攔截器圖解分析

前言

OkHttp系列文章
OkHttp系列文章(一) - Java網(wǎng)絡(luò)編程基礎(chǔ)
OkHttp系列文章(二) - Http與Https
OkHttp系列文章(三) - OkHttp
OkHttp系列文章(四) - OkHttp攔截器原理
OkHttp系列文章(五) - OkHttp的5個(gè)攔截器作用
OkHttp系列文章(六) - OkHttp的5個(gè)攔截器圖解分析
OkHttp系列文章(七) - 文件更新下載

1. OkHttp攔截器圖解分析
OkHttp5個(gè)攔截器的分析.png
分析上圖可知:
相關(guān)知識(shí):

1>:首先從最上邊發(fā)送Request請(qǐng)求薪捍,經(jīng)過5個(gè)攔截器花嘶,一直發(fā)到最下邊,然后從最下邊返回響應(yīng) Response鼎天,一直到最上邊邮偎;
2>:中間5個(gè)攔截器只做自己相關(guān)的事情;

1>:對(duì)于RetryAndFollowUpInterceptor重試攔截器:
a>:Retry重試機(jī)制應(yīng)用場(chǎng)景1 —— 返回307:

在Retry攔截器返回的Response數(shù)據(jù),如果是307(重定向)络它,就不要再給上邊發(fā)送了,而是在Retry攔截器中把 Location解析出來歪赢,拿到新的連接之后化戳,就封裝成一個(gè)新的請(qǐng)求,然后重新再往下邊發(fā)送 Request請(qǐng)求埋凯,再走一遍流程点楼,再一次返回到 Retry攔截器時(shí)候,判斷返回的Response是否是307白对,如果沒有307了掠廓,就把數(shù)據(jù)給客戶端返回回去,讓客戶端顯示躏结;

b>:Retry重試機(jī)制應(yīng)用場(chǎng)景2 —— 拋異常:

比如在向下邊發(fā)送 Request請(qǐng)求時(shí)却盘,在任何一個(gè)攔截器里邊發(fā)生異常,這個(gè)時(shí)候在 Retry攔截器中try...cache...媳拴,判斷如果這個(gè)異常不是致命的異常黄橘,比如只是 socket連接超時(shí),那么就不要拋異常給 Retry上邊的客戶端屈溉,讓其再執(zhí)行一遍所有攔截器流程塞关,如果是致命的異常,就拋給上邊子巾,讓其執(zhí)行異常的方法帆赢,就是聯(lián)網(wǎng)請(qǐng)求的 onFailure()方法;

2>:對(duì)于BridgeInterceptor基礎(chǔ)攔截器:

BridgeInterceptor攔截器就是添加一些通用的頭部信息线梗,比如Connection(保持連接)椰于、支持zip壓縮,如果返回的數(shù)據(jù)是 InputStream仪搔,就需要解壓數(shù)據(jù)瘾婿,就需要用GZipInputStream去讀數(shù)據(jù),否則全是亂碼烤咧;

3>:對(duì)于CacheInterceptor緩存攔截器:

從最上邊開始發(fā)起請(qǐng)求偏陪,到 CacheInterceptor時(shí)候,發(fā)現(xiàn)有緩存煮嫌,就不往下邊的攔截器走了笛谦,直接又返回 Response到客戶端并顯示數(shù)據(jù);如果沒有緩存昌阿,就還會(huì)往下邊的攔截器去跑饥脑,這個(gè)時(shí)候就需要給 CacheInterceptor添加一些字段恳邀,給頭部添加一個(gè) If - Modified - Since,然后繼續(xù)向下邊攔截器執(zhí)行好啰,當(dāng)返回到 CacheInterceptor時(shí)轩娶,對(duì)數(shù)據(jù)做一次緩存,最后把 Response返回給 客戶端框往;當(dāng)下一次再執(zhí)行到 CacheInterceptor時(shí)候發(fā)現(xiàn)有緩存鳄抒,就不會(huì)往下邊走了,直接讀緩存椰弊,然后返回?cái)?shù)據(jù)上去給客戶端就可以许溅;

4>:對(duì)于ConnectInterceptor連接攔截器:

從最上邊開始發(fā)起請(qǐng)求,找可用的連接秉版,如果有贤重,就不需要建立新的socket連接,直接從 ConnectInterceptor到CallServerInterceptor讀寫數(shù)據(jù)清焕,然后再把結(jié)果返回給最上邊的客戶端并蝗;
如果沒有新的連接,就與 Server建立新的連接秸妥,然后繼續(xù)從 ConnectInterceptor到CallServerInterceptor讀寫數(shù)據(jù)滚停,然后再把結(jié)果返回給最上邊的客戶端;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末粥惧,一起剝皮案震驚了整個(gè)濱河市键畴,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌突雪,老刑警劉巖起惕,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異咏删,居然都是意外死亡惹想,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門督函,熙熙樓的掌柜王于貴愁眉苦臉地迎上來勺馆,“玉大人,你說我怎么就攤上這事侨核。” “怎么了灌灾?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵搓译,是天一觀的道長。 經(jīng)常有香客問我锋喜,道長些己,這世上最難降的妖魔是什么豌鸡? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮段标,結(jié)果婚禮上涯冠,老公的妹妹穿的比我還像新娘。我一直安慰自己逼庞,他們只是感情好蛇更,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著赛糟,像睡著了一般派任。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上璧南,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天掌逛,我揣著相機(jī)與錄音,去河邊找鬼司倚。 笑死豆混,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的动知。 我是一名探鬼主播皿伺,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼拍柒!你這毒婦竟也來了心傀?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤拆讯,失蹤者是張志新(化名)和其女友劉穎脂男,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體种呐,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡宰翅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了爽室。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片汁讼。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖阔墩,靈堂內(nèi)的尸體忽然破棺而出嘿架,到底是詐尸還是另有隱情,我是刑警寧澤啸箫,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布耸彪,位于F島的核電站,受9級(jí)特大地震影響忘苛,放射性物質(zhì)發(fā)生泄漏蝉娜。R本人自食惡果不足惜唱较,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望召川。 院中可真熱鬧南缓,春花似錦、人聲如沸荧呐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽坛增。三九已至获雕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間收捣,已是汗流浹背届案。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留罢艾,地道東北人楣颠。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像咐蚯,于是被迫代替她去往敵國和親童漩。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理春锋,服務(wù)發(fā)現(xiàn)矫膨,斷路器,智...
    卡卡羅2017閱讀 134,651評(píng)論 18 139
  • 本文為本人原創(chuàng)期奔,轉(zhuǎn)載請(qǐng)注明作者和出處侧馅。 在上一章我們分析了Okhttp分發(fā)器對(duì)同步/異步請(qǐng)求的處理,本章將和大家一...
    業(yè)松閱讀 973評(píng)論 2 8
  • 前言 OkHttp系列文章OkHttp系列文章(一) - Java網(wǎng)絡(luò)編程基礎(chǔ)OkHttp系列文章(二) - Ht...
    世道無情閱讀 1,956評(píng)論 0 2
  • ? 這幾年,我見過太多的留守兒童肺孤,在爺爺奶奶的照顧下罗晕,吃飽穿暖而已,他們生命里缺少太多的溫暖赠堵。 他們的父母好像被這...
    溪邊杜若閱讀 599評(píng)論 0 0
  • "堅(jiān)強(qiáng)"這字眼小渊,有時(shí)對(duì)我來說好恐懼趴梢。其實(shí)堅(jiān)強(qiáng)久了预烙,有時(shí)候就突然覺得好害怕。堅(jiān)強(qiáng)在我生命里讓我有了許多的小故事屋休。 記...
    小智13閱讀 176評(píng)論 0 1