HTTP2.0
- HTTP/2 采用二进制格式传输数据,而非 HTTP/1.x 的文本格式。二进制格式在协议的解析和优化扩展上带来更多的优势和可能。
- HTTP/2 对消息头采用 HPACK 进行压缩传输,能够节省消息头占用的网络的流量。而 HTTP/1.x 每次请求,都会携带大量冗余头信息,浪费了很多带宽资源。头压缩能够很好的解决该问题。
- 多路复用,直白的说就是所有的请求都是通过一个 TCP 连接并发完成。HTTP/1.x 虽然通过 pipeline 也能并发请求,但是多个请求之间的响应会被阻塞的,所以 pipeline 至今也没有被普及应用,而 HTTP/2 做到了真正的并发请求。同时,流还支持优先级和流量控制。
iOS9开始自动支持HTTP2
NSURLCache
请使用 GET 请求。POST请求不能被缓存,只有 GET 请求能被缓存。
如果你已经使用 了 GET 请求,iOS 系统 SDK 已经帮你做好了缓存。你需要的仅仅是设置下内存缓存大小、磁盘缓存大小、以及缓存路径。甚至这两行代码不设置也是可以的,会有一个默认值。
NSURLCache *urlCache = [[NSURLCache alloc] initWithMemoryCapacity:4 * 1024 * 1024 diskCapacity:20 * 1024 * 1024 diskPath:nil];
[NSURLCache setSharedURLCache:urlCache];
iOS网络缓存扫盲篇--使用两行代码就能完成80%的缓存需求
文件缓存
借助ETag或Last-Modified判断文件缓存是否有效;
如果文件没有更新,服务端返回304,客户端从本地缓存取内容;
如果文件更新,服务端返回200,客户端从服务端取内容,并更新本地缓存。
HttpDns
DNS劫持,是指在DNS解析过程中拦截域名解析的请求,然后做一些自己的处理,比如返回假的IP地址或者什么都不做使请求失去响应,其效果就是对特定的网络不能反应或访问的是假网址。根本原因就是以下两点:
1:恶意攻击,拦截运营商的解析过程,把自己的非法东西嵌入其中。
2:运营商为了利益或者一些其他的因素,允许一些第三方在自己的链接里打打广告之类的。
我们知道要要把项目中请求的接口替换成成IP其实很简单,URL是字符串,域名替换IP,无非就是一个字符串替换而已,的确这块其实没有什么技术含量,而且现在像阿里云(没开源),七牛云(开源),等一些比较大的平台在这方面也都有了比较成熟的解决方案,一个SDK,传个普通的URL进去就会返回一个域名被替换成IP的URL出来,也比较好用