【问题标题】:If a browser is HTTP1.x Compatible is it also HTTP2 compatable?如果浏览器兼容 HTTP1.x,它是否也兼容 HTTP2?
【发布时间】:2020-12-30 13:22:06
【问题描述】:

在阅读了许多关于 HTTP2 主题的不同文章、论文和博客文章后,包括 Wikipedia 的 HTTP2 页面,甚至一些 HTTP2 开发人员/工程师关于 HTTP2 的推文,我仍然对 HTTP2 的确切状态有点不清楚兼容性和支持。

我今天阅读了很多关于 HTTP2 的内容,并且多次提到“HTTP2 向后兼容”。我还读到,在 HTTP2 最初发布时,任何当代的知名浏览器都不支持新的通信技术。诚然,我可能对“Backwards-Compatible”和“support”这两个词的真正含义缺乏理解;假设如果 HTTP2 向后兼容,那么它应该反过来在 HTTP1.x 可以工作的任何地方工作,这不公平吗? HTTP2 向后兼容的全部原因是,从本质上讲,HTTP2 不会破坏万维网?这样想,对我来说,唯一的选择就是向后兼容,但是如果浏览器必须提供支持更新才能兼容,那么 HTTP2 向后兼容又有什么意义呢?

我真正感到困惑的是,这几乎留下了一切。我知道现在大型浏览器大部分都支持 HTTP2,但是旧浏览器呢? Netscap-8 和 IE-9 不会很快得到任何新的更新,实际上,永远不会...... 像 Netscape 和 IE 这样的传统浏览器的命运也注定了新 HTTP 技术的到来(考虑到 HTTP3也已经存在了……)?

所以我问这一切的全部原因是因为我已经开始了我的下一个项目,我希望服务器使用 HTTP2 进行通信。它是一个 Node.js 应用程序,我正在构建一个小型框架,而不是使用 express,这样我就可以通过并自己编写 HTTP2 服务器,因此我对 HTTP2 和 Node.js HTTP2 API 有所了解。我想知道HTTP2在哪里兼容?还是我不应该担心? Native NodeJS 在某个时候在其更高版本中发布了一个模块,并配备了一个 API。该 API 称为“Comparability API”。我对此知之甚少,但我知道它能够构建同时支持 HTTP/1 和 HTTP/2 的应用程序,但是,我不知道这是否是我需要的。如何确保我的 HTTP2 应用程序能够在至少 IE9 及更高版本的浏览器上加载?

【问题讨论】:

    标签: node.js http http2


    【解决方案1】:

    您误解了术语向后兼容。这并不意味着向后支持 - 它只是意味着它不是重大更改,HTTP/1.1 浏览器仍然可以连接并继续使用 HTTP/1.1 而无需任何更改。

    HTTP/2 有很多方法可以检测浏览器和服务器是否支持它,如果两者都支持,则只使用它,如果它们不支持,则继续使用 HTTP/1.1。它甚至指定了如果这些检测失败并且 HTTP/1.1 客户端连接并在服务器认为这是 HTTP/2 连接时尝试与 HTTP/1.1 通信时如何回退。这意味着旧的浏览器(例如 IE9)不需要知道 HTTP/2。

    如果所有浏览器都必须发送以前未发送的新版本设置以明确要求服务器与 HTTP/1.1 通信,则非向后兼容更改将是。这将意味着 IE9 等根本无法连接到支持 HTTP/2 的服务器,而无需更新。

    一般而言,网络非常努力地确保更改向后兼容并且旧软件仍然可以工作 - 即使对于那些老客户来说这会降低体验。实际上,向后兼容是将某些东西推广到 Internet 的唯一方法,否则采用会受到严格限制,因为很少有人会想要切断这样的旧浏览器。

    因此,对您而言,这意味着您的服务器需要同时支持 HTTP/1.1 和 HTTP/2。我想大多数服务器会在很长一段时间内支持这一点(甚至是 HTTP/1.0),而仅 HTTP/2 的服务器将非常少见,而且不太可能作为公共 Web 服务器安装。

    Node Compatibility API 基本上会为您解决这个问题。您创建一个 HTTP/2 服务器,它也会自动为您支持 HTTP/1.1,并在需要时使用它(例如,旧客户端或不支持 HTTP/2 的代理背后的客户端)。

    这确实意味着您不能假设您的网络访问者将使用 HTTP/2,并且某些在 HTTP/2 下工作得更好的事情(例如发送更多更小的资源,而不是更少的大型资源)可能对 HTTP 更不利/1.1 访客。但它仍然可以工作。

    【讨论】:

    • 感谢 Barry,我现在很清楚,我有责任构建支持 HTTP1.x 到 HTTP2 的服务器。我知道我需要在 Node 中使用兼容性 API/Module 构建 HTTP2 服务器。我仍然不是 100% 理解向后兼容的定义,但我知道我之前认为它的定义是错误的,并且我确实有一个比以前更好的想法。无论如何,再次感谢。
    猜你喜欢
    • 2011-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-25
    • 2012-10-19
    • 2012-08-09
    相关资源
    最近更新 更多