本篇文章的HTTPDNS集成,只針對HTTP協(xié)議進(jìn)行ip直連。相對HTTPS而言,沒有SSL/TLS的握手過程,更不會出現(xiàn)SNI的場景,故而不需做SNI的配置,更加不會用到CFNetwork網(wǎng)絡(luò)庫,簡單了許多。第一期對HTTPDNS概念已經(jīng)做過闡述了,就不多介紹了。下面就直奔本文主題,將干貨呈上。
一、還是用NSURLProtocol攔截請求的方式,用ip替換host。
1、注冊自定義的URLPrototcol,再自定義NSURLSessionConfiguration的屬性。還是那句話:此處為了便于理解所以引用了SDWebImage,實(shí)際操作的時(shí)候,建議對外提供一個(gè)注冊接口(一個(gè)返回值為NSURLSessionConfiguration的接口。eg:+ (NSURLSessionConfiguration *)configurationForHttpDns),不要直接用此種直接依賴SDWebImage的方式,以免污染HTTPDNS部分。 圖 2如圖1

第2步、對于要過濾攔截的域名需在此方法判斷 圖 3

圖 3
第3步、請求ip替換host的過程,并給header添加host。如圖4

圖 4
若為post請求,拿回body數(shù)據(jù)。如圖5

圖 5
第4步、用的新的request重新創(chuàng)建sessionTask,然后resume。如圖6

圖 6
第5步、網(wǎng)絡(luò)鏈接、數(shù)據(jù)傳輸、網(wǎng)絡(luò)錯(cuò)誤的處理過程,如圖7。(因?yàn)榇颂帪閔ttp,所以不會有SSL/TLS的握手過程。)

圖 7