【问题标题】:When does a http2 TCP connection close?http2 TCP 连接何时关闭?
【发布时间】:2018-06-14 21:18:27
【问题描述】:

我了解http2使用一个tcp连接来服务多个请求,例如,如果我请求包含a.css和a.js的index.html,这三个请求将在一个tcp连接中完成。

如果用户点击 index2.html 会发生什么?此请求是否仍使用相同的先前 tcp 连接?如果是这样,浏览器是否会保持连接打开,直到用户关闭浏览器?而在服务器端,服务器是否一直保持许多连接打开?

【问题讨论】:

    标签: http tcp http2


    【解决方案1】:

    使用 HTTP/2 时,浏览器通常只为每个域打开一个连接。

    在您的示例中,index2.html 将在用于index.html、a.css 和 a.js 的同一 TCP 连接上发送。

    在 HTTP/2 中,请求被多路复用在同一个 TCP 连接上,因此浏览器可以同时发送它们,而无需等待之前的请求得到响应。

    浏览器和服务器都有 TCP 连接的空闲超时。 如果连接空闲足够长的时间,它将被任何一方关闭 - 空闲超时较短的一方,以节省资源。 例如,您可以打开到wikipedia.org 的连接,执行一些请求,然后离开该选项卡并处理其他事情。 一段时间后(通常为 30 秒),浏览器将关闭与wikipedia.org 的 TCP 连接。

    在服务器端,服务器将保持来自各个客户端的连接打开,直到它们被客户端关闭或服务器端空闲超时触发,此时是服务器发起关闭 TCP连接。

    使用 HTTP/2,服务器必须维护的连接数大大少于使用 HTTP/1.1。 使用 HTTP/2,服务器必须为每个客户端维护 1 个 TCP 连接;对于 HTTP/1.1,服务器通常必须为每个客户端维护 2-8 个 TCP 连接。

    【讨论】:

    • 如果它只需要维护 1 个 TCP 连接,它与 HTTP/1.1 keep-alive 有何不同?如果它只使用 1 个 TCP 连接,为什么不使用 web-sockets 呢?我认为使用 web-sockets 时服务器的要求和限制是相同的。在这两种情况下,服务器都必须为每个客户端维护 1 个连接。
    • 对于 MPA 应用程序,HTTP 的请求/响应模型可能就足够了。但对于需要一些实时功能且无需轮询的 SPA 应用程序,我认为 web-sockets 会是更好的选择吗?
    • HTTP/2 维护 一个 多路连接,而 HTTP/1.1 维护 许多 个双路连接。 WebSocket 只是一个框架协议,并没有像 HTTP 那样的任何语义。例如,PUT /contracts/1 HTTP/1.1 + Content-Encoding: gzip 告诉服务器很多关于请求的信息。要在 WebSocket 之上重建相同的信息,您基本上必须在 WebSocket 之上重新发明 HTTP 协议。 WebSocket 可能在某些情况下工作,但对于许多其他情况,HTTP 是更好的选择,因为它具有更高级别的语义(在 WebSocket 中完全没有)。
    • 忽略语义,只谈论服务器上的传输和负载(更昂贵)。
    • “对于 SPA 应用程序,我认为使用 Web 套接字比 HTTP 更好。”您必须解释原因(您仍然需要在 WebSocket 之上构建另一个协议)并提供基准。鉴于当前类似 REST 的服务器端应用程序以及通过 JavaScript 框架在浏览器上支持 REST,对于 SPA 应用程序,HTTP 可能是更好的选择。当您的应用程序需要将服务器端事件传递给客户端时,WebSocket 会大放异彩,但这通常不是常见的要求。
    猜你喜欢
    • 2017-06-27
    • 2022-01-20
    • 2013-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多