iOS 图片库HTTP/3实验 的一些结论

图片库升级

过去SDWebImage内部对NSURLConnection进行封装,作为基础网络层,最高支持HTTP/1.1协议,带来的问题是随着苹果不再维护NSURLConnection,新的网络协议如HTTP/2、HTTP/3都不支持,网络性能数据统计不够全面。

结论

实验数据看,升级NSURLSession后,图片总耗时降低15%左右,主要原因是HTTP/2协议带来的收益,头部压缩、多路复用特性,对首包耗时和传输耗时有较大优化。

HTTP3

If you're using URLSession,you don't need to change your app since iOS 15and macOS Monterey ship with HTTP/3 enabled by default.Once you enable HTTP/3 on your server,you're good to go.Both the upcoming HTTP/3 RFC versionand the earlier HTTP/3 Draft version 29 are supported.

通过Accelerate networking with HTTP/3 and QUIC - WWDC21 - Videos - Apple Developer介绍可以知道,Server端如果支持了HTTP/3,客户端iOS15及以上默认支持。

苹果有提到一点,通过Alt-Svc来支持H3协议,通常端上在第一次网络传输时使用的还是HTTP/2协议,等下一次网络传输再使用HTTP/3协议传输。Apple在iOS15之后,提供了assumesHTTP3CapableAPI,开启后,第一次网络传输就使用HTTP/3协议,但有一个前提条件是Server是真实支持HTTP/3,否则依然会降级。

结论

  1. 网络首包耗时 160ms->115ms,降低28%,网络传输耗时 180ms->135ms,降低25%。
  2. HTTP/3使用UDP协议传输,更少的握手次数,同时解决了TCP层的队头阻塞问题,在网络传输性能上有了非常大的提升。

DNS over HTTPS

DNS域名解析作为网络链路的一个环节,支持UDP/TLS/HTTPS协议的方式,

  • DoH(DNS over HTTPS):基于RFC 8484,通过HTTPS协议请求域名服务器,支持GET、POST方式
  • DoT(DNS over TLS):基于RFC 7858,经过TLS加密的TCP连接提供DNS解析

目前市场应用仍然以UDP协议为主,安全性方面是显得薄弱,虽然手机操作系统厂商在过去两年已经支持DNS加密,但是还没有得到广泛的应用。为了移动端有更好的兼容性和扩展灵活性,HTTPS协议通常会是更好的选择,因此选择DoH的方案。

HTTPDNS

作为移动端解析DNS的方案,国内主要是阿里云、腾讯云等厂商提供的软件服务,基于HTTP协议,兼容DoH/DoT,还可以基于DoH协议扩展或者自定义协议,通常是SDK的形式提供给接入方。