移除旧版 SPDY 协议支持

这是 Apple CFNetwork 团队的客座文章,内容关于 Safari 和 WebKit 在 Apple 平台上使用的 URLSession 网络框架的变更。这些变更可能会影响与您网站的兼容性。

SPDY 是一种网络协议,旨在通过解决 HTTP/1.1 协议的许多限制来提高网页浏览和其他基于 HTTP 的通信的性能。Safari 在 2014 年随 Apple 的 OS X Yosemite 和 iOS 8 版本获得了对 SPDY 协议的支持。这是通过向 Foundation 网络 URLSession API 添加 SPDY 支持实现的。

SPDY 协议的许多组件被证明是 HTTP/1.1 的成功改进,因此互联网工程任务组 (IETF) 起草了一项新的协议规范,即 HTTP/2,该规范基于许多相同的思想,并增加了其他改进。Safari 和 URLSession 在 2015 年随 Apple 的 OS X El Capitan 和 iOS 9 版本增加了对 HTTP/2 协议的支持。

与 HTTP/2 和 HTTP/1.1 不同,SPDY 协议并非由 IETF 的互联网标准指定。相反,它是一个实验性协议,是 HTTP/2 的垫脚石。事实上,许多支持 SPDY 的浏览器和服务器很快就迁移到了 HTTP/2,而且,此后已经完全放弃了对 SPDY 的支持(例如,ChromeFirefoxCloudflare)。

在最近发布的 Apple 开发者 Beta 版 macOS Mojave 10.14.4 和 iOS 12.2 中,对旧版 SPDY 协议的支持已被弃用。在即将发布的版本中,旧版 SPDY 协议支持将从 Safari 以及 Apple 的 URLSession(和已弃用的 NSURLConnection)API 中完全移除。同时,对旧版 NPN TLS 扩展的支持也将被移除。NPN 是为 SPDY 添加的,也从未标准化,已被 ALPN 取代。

移除旧版 SPDY 协议支持对许多 Safari 用户和使用 URLSession 的其他应用程序影响不大。那些曾添加 SPDY 支持的服务器会继续支持 HTTP/1.1,因此与这些服务器的连接将继续通过优雅地切换到使用 HTTP/1.1 来工作(如果尚未升级添加 HTTP/2 支持),但这样做可能会导致性能损失。为了帮助识别 SPDY 仍在使用的任何意外情况,URLSession 将在进程启动时生成一条新的弃用日志消息,如果与服务器协商使用 SPDY。

WARNING: URLSession (or NSURLConnection) is using SPDY protocol, which is deprecated and will be removed in a future release

此日志消息从 macOS Mojave 10.14.4 和 iOS 12.2 的 Apple 开发者 Beta 版开始可用,并可在系统日志中找到。

对于许多人来说,移除旧版 SPDY 支持无需采取任何行动,因为 URLSession API 将自动切换到可用的最佳协议。然而,如果您拥有或运营的 Web 服务器仍然支持 SPDY 和/或 NPN 实验技术,我们鼓励您现在升级到 HTTP/2,以便您的客户端可以利用其诸多优势。如果您有任何系统阻止从 SPDY 过渡到 HTTP/2,请通过联系我们的 Web Technologies Evangelist提交包含详细信息的错误报告 告知我们。