据我所知,http2使用一个tcp连接来提供多个请求,例如,如果我请求包含a.css和a.js的index.html,这三个请求将在一个tcp连接中完成。
如果用户点击index2.html会怎样?此请求是否仍在同一个以前的tcp连接中?如果是这样,浏览器将保持连接打开,直到用户关闭浏览器?在服务器端,服务器必须始终保持许多连接打开?
答案 0 :(得分:9)
使用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连接。