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

时间:2018-09-11 09:47:43

标签: 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客户端中使用它。

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

2 个答案:

答案 0 :(得分:5)

您目前无法执行此操作。通常,HTTP / 2对网页和Web应用程序的使用应该是透明的,因此不需要实现低级HTTP / 2流和连接详细信息。那就是实现方式之美的一部分-浏览器负责所有这些工作,并且网页和Web应用程序无需知道使用的是HTTP / 1.1还是HTTP / 2。

一个可能的例外是HTTP / 2推送,并且有人提议以编程方式公开HTTP / 2推送作为Web超文本应用程序技术工作组(WHATWG)的一部分:the source。尽管那方面的活动似乎已经完全减少了。由于实施Push通知api有一些复杂性。总而言之https://github.com/whatwg/fetch/issues/51,因此尝试向Web应用程序公开推送消息将变得很复杂。也有许多人感到HTTP / 2推送的使用受到限制,并且在大多数用例中都有更好的技术,例如HTTP/2 push is complicated, especially because of different browser implementations and bugs(用于请求HTTP资源)或Web套接字(用于双向通信)。 resource hints

除推送外,优先级可能是将低级HTTP / 2详细信息公开给Web应用程序的另一个用例,并且也许Chrome are even experimenting with switching it off completely最终会为此提供映射,而无需将其绑定到HTTP / 2(因此可以可以在HTTP / 1.1,QUIC或以后的版本中使用)。

恕我直言,我不认为迫切需要允许通过Web应用程序创建或管理HTTP / 2连接,就像没有简单的方法(AFAIK)创建TCP或UDP连接一样从JavaScript。虽然这种情况仍然存在,但我认为我们不会花很多精力来创建这样的实现。即使您链接到的HTTP / 2客户端也是非常基本的,并且仅发出HTTP请求-浏览器已经允许您执行此请求(尽管我很欣赏该节点提供了更多详细信息,如果您想将浏览器设置为比该更低的级别, )。在大多数情况下,HTTP / 2流处理以及该协议的其他低级细节可能最好由浏览器本身透明地进行处理-就像现在一样。

答案 1 :(得分:1)

在客户端:

您无需在浏览器中执行任何操作,只需使用已支持HTTP 2.0协议https://caniuse.com/#search=http2

的浏览器即可。

在服务器端:

根据您使用的服务器,需要激活一些模块并配置一些文件,在这里您可以看到一些服务器配置的链接:https://github.com/http2/http2-spec/wiki/Implementations

关于服务器推送功能:

相同,这取决于服务器,但是要注意,您可以配置一个: 手动推送或自动推送(自动推送)

示例:

手动推送

IntoIterator

自动推送

server {    
    # whenever a client requests demo.html, also push
    # /style.css, /image1.jpg and /image2.jpg
    location = /demo.html {
        http2_push /style.css;
        http2_push /image1.jpg;
        http2_push /image2.jpg;
    }
}