iOS HTTPDNS集成,结合SDWebImage对HTTP协议进行"ip直连"。

本篇文章的HTTPDNS集成,只针对HTTP协议进行ip直连。相对HTTPS而言,没有SSL/TLS的握手过程,更不会出现SNI的场景,故而不需做SNI的配置,更加不会用到CFNetwork网络库,简单了许多。第一期对HTTPDNS概念已经做过阐述了,就不多介绍了。下面就直奔本文主题,将干货呈上。

一、还是用NSURLProtocol拦截请求的方式,用ip替换host。

1、注册自定义的URLPrototcol,再自定义NSURLSessionConfiguration的属性。还是那句话:此处为了便于理解所以引用了SDWebImage,实际操作的时候,建议对外提供一个注册接口(一个返回值为NSURLSessionConfiguration的接口。eg:+ (NSURLSessionConfiguration *)configurationForHttpDns),不要直接用此种直接依赖SDWebImage的方式,以免污染HTTPDNS部分。 图 2如图1

第2步、对于要过滤拦截的域名需在此方法判断 图 3

图 3

第3步、请求ip替换host的过程,并给header添加host。如图4

图 4

若为post请求,拿回body数据。如图5

图 5

第4步、用的新的request重新创建sessionTask,然后resume。如图6

图 6

第5步、网络链接、数据传输、网络错误的处理过程,如图7。(因为此处为http,所以不会有SSL/TLS的握手过程。)

图 7

你可能感兴趣的:(iOS HTTPDNS集成,结合SDWebImage对HTTP协议进行"ip直连"。)