作者:乐在TV | 来源:互联网 | 2023-01-02 17:18
据我所知,http2使用一个tcp连接来提供多个请求,例如,如果我请求包含a.css和a.js的index.html,这三个请求将在一个tcp连接中完成.
如果用户点击index2.html会发生什么?此请求是否仍在同一个以前的tcp连接中?如果是这样,浏览器将保持连接打开,直到用户关闭浏览器?在服务器端,服务器必须始终保持许多连接打开?
1> sbordet..:
使用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连接.
HTTP / 2维护_one_多路复用连接,而HTTP / 1.1维护_many_双工连接。WebSocket只是一个框架协议,并且像HTTP一样没有顶层语义。例如,`PUT / contracts / 1 HTTP / 1.1` +`Content-Encoding:gzip`告诉服务器很多有关请求的信息。要在WebSocket之上重建相同的信息,必须从根本上重新发明WebSocket之上的HTTP协议。WebSocket可能在某些情况下可以工作,但是对于许多其他情况,HTTP是一个更好的选择,因为它具有更高级别的语义(在WebSocket中完全缺失)。
“对于SPA应用程序,我认为使用Web套接字比使用HTTP更好。您必须解释原因(仍然必须在WebSocket之上构建另一个协议)并提供基准。鉴于当前类似REST的服务器端应用程序和REST通过Javascript框架在浏览器上提供支持,对于SPA应用程序,HTTP可能是一个更好的选择。当您的应用程序需要将服务器端事件传递给客户端时,WebSocket会亮起,但这通常不是常见要求。