study icon indicating copy to clipboard operation
study copied to clipboard

HTTP、WebSocket、HTTP2

Open cfour-hi opened this issue 6 years ago • 0 comments

HTTP 协议 与 TCP/IP 协议之间的关系

HTTP 属于应用层协议,传输层使用 TCP 协议,在网络层使用 IP 协议。IP 协议主要解决网络路由和寻址问题,TCP 协议主要解决如何在 IP 层之上可靠的传递数据包,使在网络上的接收端收到发送端发出的所有包,并且收到顺序与发出顺序一致。

HTTP 的无状态特点

HTTP 协议是无状态的,意思是协议对于事务处理没有记忆功能。每次 HTTP 连接结束,等于生命的结束,再次建立连接就是一个新的生命诞生,之前生命的所有状态都要重新传送。

短连接和长连接

HTTP 1.0 默认使用短连接,HTTP 1.1 默认使用长连接,短连接和长连接实质上都是 TCP 的连接。

  • 短连接:客户端接收到服务端响应之后会立即断开连接,也就是说每请求一个资源都要经历一次完整的 HTTP 从连接到关闭过程。

  • 长连接:客户端收到服务端响应之后连接不会立即断开(服务端可配置连接保活时间),除非二者主动提出断开连接。响应头包含 Connection:keep-alive 表示长连接。

短连接和长连接没有好坏之分,二者各有优缺点,各自适应特定的业务场景,主要以客户端是否需要频繁请求作为区分。

短连接不适用于客户端频繁请求资源,因为每次请求都需要建立连接,浪费时间和宽带。

长连接适用于客户端频繁请求资源,但对服务端有一定的要求,随着客户端的连接越来越多,服务端的处理压力会越来越大,需要一定的策略来处理,而且还要防止客户端的恶意连接。

WebSocket

WebSocket 是一种计算机协议,基于 TCP 协议,用来解决客户端与服务端双向实时通信的产物。与 HTTP 协议相比,它的优点是只需一次握手就能达成持久连接,并且每次请求或响应不需要发送繁杂的 header 头部信息。

HTTP2

优化 HTTP 1.1 多路复用(多个请求合并在一个 TCP 连接内),使用流的方式修复对头阻塞问题。一个 TCP 连接分为若干个流(每个请求或响应都是一个数据流),每个流包含若干个消息,每个消息有若干个二进制桢组成。每个数据流都有唯一的编号,数据包会被标识数据流的编号进行传输,并且是无序发送的。

头信息压缩:由于 HTTP 协议无状态,每次请求和响应都需要发送一堆重复的头信息,浪费时间和宽带。一方面使用 gzip 或 compress 压缩,另一方便,客户端和服务器共同维护一份静态字典(头信息表),其中包含了常见头部名及常见头部名称与值的组合的代码,每个字段生成索引号。

服务端推送:之前客户端在接收到页面内容之后需要经过解析之后再去请求页面所需资源。现在服务器收到请求后分析请求内容,做出对客户端预期请求资源的判断,向客户端发送所需资源,也就是预加载。

cfour-hi avatar Oct 18 '17 09:10 cfour-hi