【问题标题】:Why do web browsers not support h2c (HTTP/2 without TLS)?为什么网络浏览器不支持 h2c(没有 TLS 的 HTTP/2)?
【发布时间】:2018-03-29 01:43:38
【问题描述】:

我真的在网上搜索,我找不到网络浏览器不支持h2c(没有TLS的http/2)的原因。任何想法,不胜感激。

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

我觉得对于许多资源来说,虽然真实性总是好的,但不需要保密(尽管有一些私有实现,但http正文的数字签名并未得到广泛支持)。既然不需要保密,那么拥有h2c确实是一件好事。

【问题讨论】:

标签: https http2


【解决方案1】:

技术上

HTTP/2 比 HTTPS 更好、更容易处理的技术原因有几个:

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

意识形态

一些大型网络浏览器开发团队共享并部分参与了网络上更多 HTTPS 的推动。如果功能仅通过 HTTPS 实现,这将被视为一种奖励,因为它们会成为网站和服务迁移到 HTTPS 的另一个动机。因此,一些团队从未非常努力地(如果有的话)使 HTTP/2 在没有 TLS 的情况下工作。

实际

至少有一家浏览器供应商在早期就表示打算通过纯文本 HTTP (h2c) 为用户实施和提供 HTTP/2。由于上述技术障碍,他们最终从未这样做。

【讨论】:

  • 好的,但是本地网络呢?我有一个路由器,想在192.168.1.1 上打开它的管理面板,所以路由器不能有任何有效的 TLS 证书,除了我的浏览器会拒绝的自签名证书。
  • @stokito 即使在本地网络上,浏览器也不知道请求是否会通过破坏新功能的旧代理。 Websockets 和 brotli 压缩也受益于 TLS,原因与中间服务器隐藏的类似原因相同。事实上,浏览器也不会在没有 TLS 的情况下请求 brotli 压缩(正如 Daniel 在他的回答中提到的那样)。将 TLS 视为无能和恶意行为的隐私。
  • @stokito 您仍然可以在路由器上放置真正的证书。只需在您的客户端 PC 中为本地 PC 上的 router.example.com 之类的内容设置一个主机文件条目。然后获取该名称的 LetsEncrypt 或类似证书。如果您获得像 *.example.com 这样的通配符证书,您甚至不必将路由器名称公开。
猜你喜欢
  • 2016-03-08
  • 1970-01-01
  • 2011-07-03
  • 2019-02-12
  • 2011-03-17
  • 1970-01-01
  • 2016-09-07
  • 1970-01-01
相关资源
最近更新 更多