迫于前段时间云服务器到期,我迁移了自己的网站。在测试连接时,我发现 Safari 无论如何也触发不了 HTTP/3 。我确认自己没有开代理,而且同样网络条件下 Google Chrome 是可以的。于是我开始研究这个神奇的现象。
首先我经过一些搜索,学到了一类新的 DNS 记录——HTTPS Resource Records (Type 65)。这条记录支持很多字段,其中就包含了 HTTP/3 。经过测试 Safari 可以通过此记录激活 HTTP/3 ,典型例子就是 Cloudflare 的网站(包括本站)。
上述概念其实是我第一次听说,此前我只知道通过添加 Alt-Svc 头来声明 h3 ,这样浏览器的后续连接就会尝试使用 HTTP/3 。然而这种设置对 Safari 似乎无效,典型例子是 NGINX QUIC Preview,我试了很多次都没有成功。
我印象里早期 HTTP/3 还是草案的时候,Safari 是可以的。在正式版发布后,官方文档 TN3102: HTTP/3 in your app 也都提到了这两种方案。不知道为什么我现在用最新版本就不行了。我打算给 Apple 提反馈,大家看看能不能复现类似的情况。
1
Aoang 7 小时 33 分钟前
不同的浏览器的实现不一样。
Chrome 在 HTTP/3 可用时,会优先使用 HTTP/3 ,如果失败了,就回退至 HTTP/2 。 Safari 会并发尝试使用 HTTP/2 和 HTTP/3 ,谁先完成建立就用谁。 如果没有 HTTPS 记录,那建立连接之初就不会用 HTTP/3 ,Safari 似乎不会自动升级至 HTTP/3 。Chrome/Firefox 倒是会去做自动升级,失败回退。 |