为什么Web浏览器不支持h2c(没有TLS的HTTP/2)?

use*_*586 22 https http2

我真的在网上搜索,我找不到网页浏览器不支持h2c(没有TLS的http/2)的原因.任何想法,赞赏.

用https稍微澄清http/2使用ALPN(这称为h2).带http的http/2不需要ALPN(这叫做h2c),但几乎没有网页浏览器支持它.为什么会这样?

我觉得对于许多资源,虽然真实性总是好的,但是不需要保密(虽然有一些私有实现,但http主体的数字签名并未得到广泛支持).鉴于不需要保密,那么h2c确实是一件好事.

Dan*_*erg 36

技术上

有几个技术原因可以解释为什么HTTP/2通过HTTPS更好更容易处理:

  1. 使用ALPN在TLS中进行HTTP/2协商要容易得多,并且不会像Upgrade:普通HTTP那样丢失往返.并且它不会受到使用纯文本HTTP/2获得的POST升级问题的影响.
  2. N%的网络不支持请求中未经请求的Upgrade: h2c标头,而是响应400个错误.
  3. 通过TCP端口80执行除HTTP/1.1之外的其他操作会在Y%的情况下中断,因为世界上充满了中间框,这些中间框可以"帮助"并替换/添加内部用于此类连接的内容.如果那不是HTTP/1.1,事情就会中断(这也是brotli例如也需要HTTPS的原因).

在意识形态

在网络上推动了更多的HTTPS,这些HTTPS由一些较大的Web浏览器开发团队共享和部分工作.如果功能仅以HTTPS实现,那么它就会被视为奖励,因为它们是网站和服务转移到HTTPS的另一个动机.因此,有些团队从未尝试过非常努力(如果有的话)在没有TLS的情况下使HTTP/2工作.

几乎

至少有一家浏览器供应商早期表示有意为通过纯文本HTTP(h2c)完成的用户实施和提供HTTP/2.由于上面提到的技术障碍,他们最终从未这样做过.

  • 好的,但是对于本地网络呢?我有一台路由器,并且想在http://192.168.1.1上打开它的管理面板,因此该路由器除了我的浏览器将拒绝的自签名之外,没有任何有效的TLS证书。 (3认同)
  • @stokito即使在本地网络上,浏览器也不知道请求是否可能通过破坏新功能的旧代理。由于对中间服务器隐藏的类似原因,Websockets 和 brotli 压缩也受益于 TLS。事实上,如果没有 TLS,浏览器也不会请求 brotli 压缩(正如 Daniel 在他的回答中提到的)。将 TLS 视为防止无能和恶意行为的隐私。 (3认同)
  • @stokito你仍然可以在你的路由器上放置一个真正的证书。只需在客户端电脑中设置一个主机文件条目,例如本地电脑上的 router.example.com 。然后获取该名称的 LetsEncrypt 或类似证书。如果您获得像 *.example.com 这样的通配符证书,您甚至不必向公众公开路由器名称。 (3认同)