据我所知,http2使用一个tcp连接来提供多个请求,例如,如果我请求包含a.css和a.js的index.html,这三个请求将在一个tcp连接中完成.
如果用户点击index2.html会发生什么?此请求是否仍在同一个以前的tcp连接中?如果是这样,浏览器将保持连接打开,直到用户关闭浏览器?在服务器端,服务器必须始终保持许多连接打开?
sbo*_*det 15
使用HTTP/2时,浏览器通常每个域只打开一个连接.
在您的示例中,index2.html将在与用于的相同TCP连接上发送index.html,a.css和a.js.
在HTTP/2中,请求在同一TCP连接上进行多路复用,以便浏览器可以同时发送它们,而无需等待先前的请求被响应.
浏览器和服务器都有TCP连接的空闲超时.如果连接空闲的时间足够长,它将被任何一方关闭 - 具有较短空闲超时的一方,以节省资源.例如,您可以打开与a的连接wikipedia.org,执行一些请求,然后离开该选项卡并处理其他内容.一段时间后(通常为30秒),浏览器将关闭TCP连接wikipedia.org.
在服务器端,服务器将保持各个客户端的连接打开,直到它们被客户端关闭或者直到服务器端空闲超时触发,此时它是启动TCP连接关闭的服务器.
使用HTTP/2,服务器必须维护的连接数远远少于HTTP/1.1.使用HTTP/2,服务器必须为每个客户端维护1个TCP连接; 对于HTTP/1.1,服务器必须每个客户端通常维护2-8个TCP连接.