在Chrome或Safari中强制使用HTTP/2

12

有没有一种方法可以告诉Chrome或Safari在特定的URL/地址/服务器上使用HTTP/2?

我的意思是通过更改某些设置之类的方式,而不是通过在服务器套接字上实现ALPN或任何可能需要的东西。我想在等待ALPN协商告诉浏览器使用HTTP/2之前,在服务器套接字上尝试HTTP/2。


澄清一下:我已经在Chrome上启用了HTTP/2(通过chrome://flags的SPDY/4)。它仍然不会通过升级来探测我的(TLS或明文)套接字的HTTP/2。我想强制Chrome要么这样做,要么直接假设HTTP/2。

此外,我已经阅读到Chrome不支持通过明文连接进行HTTP/2,即使HTTP/2标准允许这样做。但也许有某种方法可以解决这个问题。

2个回答

12

HTTP/2通过TLS和TCP传输协议进行定义,分别使用标识符 h2 h2c 来区分。

目前Chrome只支持使用h2传输协议。

若您的服务器仅实现了h2c,则将Chrome连接到服务器的最简单方法是在服务器之前使用反向代理,例如nghttpx在HTTP/2桥接模式下进行连接。


谢谢你的回答。但是,我想在服务器套接字上尝试HTTP/2,而不必等待进行ALPN协商以告诉浏览器使用HTTP/2。 - Jonas N
您不必“等待”ALPN,而且它不会比普通TLS握手消耗更多资源:服务器在选择TLS协议版本时,不仅选择TLS协议版本,还选择应用协议(例如,浏览器宣布支持TLS 1.1、TLS 1.2、HTTP/1.1、SDPY/3.1、H2,服务器选取TLS 1.2和H2用于会话。明文套接字上的HTTP/2称为h2c,Chrome不支持它。) - rluta
我所说的“等待”是指:我使用的“平台”Java目前没有TLS套接字ALPN,但最终它会有(无法想象它在某个时候不会得到)。通过说服浏览器直接使用HTTP/2,我将不需要ALPN。参见https://dev59.com/tInca4cB1Zd3GeqP9EwL。 - Jonas N
谢谢你提供的两个想法。代理的想法是对这个问题的一个很好的回答,因为它仍然是HTTP2,避免了我需要避免的HTTP1中的头部阻塞问题,所以如果你把它放在你的答案文本中的第一位,我会检查它。Jetty ALPN 的东西对我的Java问题是一个不错的答案,我认为。 - Jonas N
"HTTP/2 over TLS和HTTP/2 over TCP"可以改变,它们都是TCP,对吧...总之,被接受了,因为代理是不需要在服务器上实现ALPN的解决方案,尽管它并没有技术上强制浏览器使用HTTP2。也许那不会发生。浏览器应该至少在本地主机上进行Upgrade,以帮助懒惰的服务器开发人员,这至少是我的愚蠢看法。--感谢您的参与!" - Jonas N
显示剩余2条评论

-1
据我所知,这很可能是一个浏览器范围的设置。在Chrome中,您可以启用SPDY4,请参见chrome://flags 就Safari而言,自版本8以来已经添加了支持。
最终,关键在于知道您是否与服务器说同一种语言。如果您正在使用http,则可以通过使用Upgrade标头来检查此内容。有一些插件可供您在Chrome中使用,以指示您访问的地址是否支持http/2。
有关http/2协议本身的更多信息,您应该查看https://http2.github.io/http2-spec/#starting

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接