Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在浏览器中实现HTTP/2流连接?_Javascript_Node.js_Http2 - Fatal编程技术网

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

Javascript 如何在浏览器中实现HTTP/2流连接?,javascript,node.js,http2,Javascript,Node.js,Http2,如今,HTTP/2的性能正在不断提高 Node.js的最新版本非常支持HTTP/2 但是我不知道如何在浏览器环境中实现HTTP/2客户端 上面的链接显示了如何在Node.js客户端中使用它 如何在浏览器中实现同一个客户端?您当前无法执行此操作。一般来说,HTTP/2对网页和web应用程序的使用应该是透明的,因此不需要实现低级HTTP/2流和连接细节。这就是它实现方式的美妙之处——浏览器处理了所有这些,网页和web应用程序不需要知道是使用了HTTP/1.1还是HTTP/2 一个可能的例外是HT

如今,HTTP/2的性能正在不断提高

Node.js的最新版本非常支持HTTP/2

但是我不知道如何在浏览器环境中实现HTTP/2客户端

上面的链接显示了如何在Node.js客户端中使用它


如何在浏览器中实现同一个客户端?

您当前无法执行此操作。一般来说,HTTP/2对网页和web应用程序的使用应该是透明的,因此不需要实现低级HTTP/2流和连接细节。这就是它实现方式的美妙之处——浏览器处理了所有这些,网页和web应用程序不需要知道是使用了HTTP/1.1还是HTTP/2

一个可能的例外是HTTP/2推送,有人提议以编程方式公开HTTP/2推送,作为Web超文本应用程序技术工作组(WHATWG)的一部分。尽管这方面的活动似乎已经完全停止了。因为在实现推送通知api时存在一些复杂问题。总而言之,尝试向web应用程序公开推送消息将是一件复杂的事情。也有许多人认为HTTP/2推送的用途有限,而且对于大多数用例来说有更好的技术,例如(用于请求HTTP资源)或web套接字(用于双向通信)

除了推送,优先级可能是向web应用程序公开低级HTTP/2细节的另一个用例,并且可能最终会提供一个映射,而不会将其绑定到HTTP/2(因此它可以在HTTP/1.1、QUIC或将来的任何版本下使用)


因此,恕我直言,我认为没有迫切需要允许从web应用程序创建或管理HTTP/2连接,就像没有简单的方法(AFAIK)从JavaScript创建TCP或UDP连接一样。尽管这种情况仍然存在,但我认为我们不会看到有多少努力来创建这样的实现。即使是您链接到的HTTP/2客户端也是非常基本的,只是发出一个HTTP请求——浏览器已经允许您这样做了(尽管我知道,如果您想降低级别,而浏览器不允许,节点会公开更多细节)。在大多数情况下,HTTP/2流处理和协议的其他低级细节可能最好由浏览器本身透明地处理,就像现在一样。

在客户端:

您不需要在浏览器中执行任何操作,只需使用已经支持HTTP 2.0协议的浏览器即可

在服务器端:

根据您使用的服务器,您需要激活一些模块并配置一些文件,在这里您可以看到一些指向服务器配置的链接:

关于服务器推送功能:

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

示例:

手动推送

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;
    }
}
server { 
    # Intercept Link header and initiate requested Pushes
    location = /myapp {
        proxy_pass http://upstream;
        http2_push_preload on;
    }
}

//httpd.conf or .htaccess (cuando se cargue un html)
<FilesMatch "\.html$">
    Header set Link "</css/styles.css>; rel=preload; as=style"
<FilesMatch>
自动推送

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;
    }
}
server { 
    # Intercept Link header and initiate requested Pushes
    location = /myapp {
        proxy_pass http://upstream;
        http2_push_preload on;
    }
}

//httpd.conf or .htaccess (cuando se cargue un html)
<FilesMatch "\.html$">
    Header set Link "</css/styles.css>; rel=preload; as=style"
<FilesMatch>
服务器{
#截取链接头并启动请求的推送
位置=/myapp{
代理通行证http://upstream;
http2_推压_预加载打开;
}
}
//httpd.conf或.htaccess(cuando se cargue un html)
标题设置链接“rel=预加载;as=样式”

我认为浏览器上没有可用的http2客户端。如果服务器支持http/2,浏览器将使用http/2-不需要“实现客户端”。。您只需使用XHR或fetch进行example@JaromandaXfetch或XHR无法控制从服务器发送的推送承诺。我认为在浏览器上提供http2客户端仍然有意义。或者您可以使用WebSocket,在这种情况下@Lewis(什么是推送承诺?)@JaromandaX我的意思是,如果没有http2客户端,您无法控制通过http2请求提供的文件(用于确定每个服务器推送的状态、每个服务器推送的响应等的事件)浏览器中需要像HTTP/2中那样的bi di流可能是因为想要重新创建websocket功能——目前使用HTTP/2是不可能的(真正的二进制数据的bi di交换)。websocket现在使用HTTP/2()是可能的,尽管无可否认还没有浏览器实现它们(Firefox的v65版本显然已经推出,而Chrome似乎已经在这方面停滞不前了).WebSocket可能是比使用HTTP更好的选择,因为HTTP有更多的开销:很高兴知道这一点,谢谢你的提示-我希望Chrome在WebSocket方面能通过HTTP/2赶上Firefox。总的来说,这是个好消息!我的用例是一个基于wasm的webapp,我想使用gRPC与服务进行通信。