如何在浏览器中实现HTTP/2流连接?

Val*_*eri 7 javascript node.js http2

现在,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客户端中使用它.

如何在浏览器中实现相同的客户端?

Bar*_*ard 5

你现在不能这样做.通常,HTTP/2在对网页和Web应用程序的使用中应该是透明的,因此不需要实现低级HTTP/2流和连接细节.这是它实现方式之美的一部分 - 浏览器负责所有这些,网页和Web应用程序无需知道是否使用了HTTP/1.1或HTTP/2.

一个可能的例外是HTTP/2推送,并且有一个提议以编程方式公开HTTP/2 Push作为Web超文本应用技术工作组(WHATWG)的一部分:https://github.com/whatwg/fetch/问题/ 51.虽然活动似乎完全放弃了.由于实现Push通知api存在一些复杂性.总而言之,HTTP/2推送很复杂,特别是因为不同的浏览器实现和错误,因此尝试将推送消息公开给Web应用程序将变得复杂.还有许多人认为HTTP/2推送的使用有限,并且大多数用例都有更好的技术,例如资源提示(用于请求HTTP资源)或Web套接字(用于双向通信).Chrome甚至正在尝试完全关闭它.

除了推送之外,优先级划分可能是将低级HTTP/2详细信息暴露给Web应用程序的另一个用例,也许优先级提示最终会提供映射,而不会将其绑定到HTTP/2(因此可以在HTTP/1.1下使用) ,QUIC或未来的任何事情).

所以恕我直言,我认为不需要允许从Web应用程序创建或管理HTTP/2连接,就像没有一种从JavaScript创建TCP或UDP连接的简单方法(AFAIK)一样.虽然情况仍然如此,但我认为我们不会看到很多努力来创建这样的实现.甚至你链接到的HTTP/2客户端都是非常基本的,只是发出了一个HTTP请求 - 浏览器已经允许你这样做了(虽然我很欣赏这个节点暴露更多的细节,如果你想要低于这个,而浏览器不会).在大多数情况下,HTTP/2流处理和协议的其他低级细节最好由浏览器本身透明地处理 - 就像现在一样.

  • WebSockets 现在可以通过 HTTP/2 (https://tools.ietf.org/html/rfc8441) 实现,尽管目前还没有浏览器实现它们(Firefox 显然已经在 v65 中实现了 - https://bugzilla.mozilla.org/ show_bug.cgi?id=1434137 和 Chrome 似乎在这个 https://bugs.chromium.org/p/chromium/issues/detail?id=801564 上停滞不前)。无论如何,Websockets 可能是更好的选择,而不是使用 HTTP,它有更多的开销:/sf/ask/3566973021/ (3认同)