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

时间:2017-10-17 11:19:41

标签: https http2

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

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

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

1 个答案:

答案 0 :(得分:36)

技术上

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

  1. 使用ALPN在TLS中进行HTTP / 2协商要容易得多,并且不会丢失普通HTTP中var project = "demo"; Ext.Ajax.request({ url: '/common/services/general/basicOperations/getDataByModelUsingGetMethod', method: 'GET', params: { actionId: 'estimatordata', dataJson: '{"aspectType":"Painting Estimator"}' }, success: function(response) { try { var response = response.responseText; var resObj = Ext.decode(response); for (var i = 0; i < resObj.data.length; i++) { if (resObj.data[i].refDataNameName == project) { console.log(JSON.stringify(resObj.data[i]['allGridsData'], null, 4)); } } this.lookupReference('selectionsinquiryDetailGrid').getStore().loadData( arr ); } catch (e) { console.log(e); } }, failure: function(response) { }, scope: this }); 之类的往返。并且它不会受到使用纯文本HTTP / 2获得的POST升级问题的影响。
  2. N%的网络不支持请求中未经请求的Upgrade:标头,而是回复400个错误。
  3. 在TCP端口80上执行除HTTP / 1.1之外的其他操作会导致Y%的情况中断,因为世界上充满了中间框,可以“帮助”并替换/添加插件中的内容以进行此类连接。如果那不是HTTP / 1.1,那么事情就会中断(这也是为什么brotli例如也需要HTTPS)。
  4. 在意识形态

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

    实际上

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