如今,HTTP/2 的性能不断提升。
最新版本的 Node.js 很好地支持 HTTP/2。
https://nodejs.org/api/http2.html
但我不知道如何在浏览器环境中实现 HTTP/2 客户端。
https://nodejs.org/api/http2.html#http2_client_side_example
上面的链接显示了如何在 Node.js 客户端中使用它。
如何在浏览器中实现相同的客户端?
最佳答案
您目前无法执行此操作。一般来说,HTTP/2 在其对网页和 Web 应用程序的使用中应该是透明的,因此无需实现低级 HTTP/2 流和连接细节。这是它实现方式的一部分美妙之处——浏览器会处理所有这一切,网页和 Web 应用程序无需知道使用的是 HTTP/1.1 还是 HTTP/2。
一个可能的异常(exception)是 HTTP/2 推送,作为 Web 超文本应用程序技术工作组 (WHATWG) 的一部分,有人提议以编程方式公开 HTTP/2 推送:https://github.com/whatwg/fetch/issues/51 .尽管这方面的事件似乎已经完全停止。由于实现推送通知 api 存在一些复杂性。总而言之HTTP/2 push is complicated, especially because of different browser implementations and bugs ,因此尝试将推送消息公开给 Web 应用程序将会很复杂。也有很多人认为 HTTP/2 推送的用途有限,并且对于大多数用例都有更好的技术,例如 resource hints (用于请求 HTTP 资源)或网络套接字(用于双向通信)。 Chrome are even experimenting with switching it off completely .
除了推送之外,优先化可能是将低级 HTTP/2 细节暴露给 Web 应用程序的另一个用例,也许 priority hints最终会为此提供一个映射,而不会将其绑定(bind)到 HTTP/2(因此它可以在 HTTP/1.1、QUIC 或 future 出现的任何内容下使用)。
所以恕我直言,我没有看到迫切需要允许从 Web 应用程序创建或管理 HTTP/2 连接,就像没有创建 TCP 或 UDP 连接的简单方法(AFAIK)一样来自 JavaScript。虽然情况仍然如此,但我认为我们不会看到很多努力来创建这样的实现。甚至您链接到的 HTTP/2 客户端也是非常基本的,只是发出一个 HTTP 请求——浏览器已经允许您这样做(尽管我很欣赏 Node 公开了更多细节,如果您想要比这更低的级别,而浏览器不).在大多数情况下,HTTP/2 流处理和协议(protocol)的其他低级细节可能最好由浏览器本身透明地处理——就像现在一样。
关于javascript - 如何在浏览器中实现HTTP/2流连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52273174/