HTTP / 1.1,webSocket和HTTP / 2.0的套接字分析

时间:2018-09-21 10:33:17

标签: sockets http websocket

我需要了解HTTP / 1.1,webSocket和HTTP / 2.0在套接字方面的工作方式(我对这三种技术之间的不同功能列表不感兴趣)。

因此,当我启动HTTP / 1.1请求时,我知道在服务器响应后,我的连接将关闭。 但是,让我说,当我启动HTTP / 1.1时。请求,在传输层级别,套接字将被初始化为将我的HTTP请求(标头和数据)发送到Web服务器。

所以我有三个问题:

  1. 如果HTTP / 1.1实现了一个套接字(从我的PC和Web服务器打开)来发送其请求,为什么它不能再使用该套接字来实现请求-响应周期呢?

  2. HTTP / 1.1和webSocket的主要区别在于,HTTP / 1.1在第一个请求-响应周期后关闭套接字,而webSocket在第一个周期后不关闭套接字吗?

  3. HTTP / 2.0如何管理客户端和服务器之间的套接字?

谢谢。

1 个答案:

答案 0 :(得分:0)

回答您的问题:

  1. 实际上,HTTP / 1.1通过使用“保持活动”功能允许将连接用于多个请求。

    这意味着可能通过单个TCP / IP连接发送多个HTTP / 1.1请求。

    但是,由于HTTP / 1.1不允许多路复用,因此请求(和响应)已序列化,由于严格的队列,这可能导致更长的请求/响应延迟短的请求/响应。

    仅供参考:关闭连接是一种HTTP / 1方法,其中响应的结束将通过套接字关闭进行标记。在HTTP / 1.1上,通常通过“ Content-Length”标头(或分块的编码标记)知道响应的结束。

  2. 不,差异更大。 WebSocket协议不是请求-响应协议,它是基于消息的协议,完全不同。

    实际上,您可以认为WebSockets与TCP / IP比与HTTP更相似,不同之处在于TCP / IP是流协议,而WebSockets是基于消息的协议...

    WebSockets协议保证消息不会分段,而TCP / IP read调用可能会返回消息的片段(或多个消息)。

  3. HTTP / 2.0使用单个连接,但是它具有二进制消息包装层,该层允许服务器和客户端进行多路复用(使用单个连接管理多个信息流)。

    这意味着请求-响应队列是并行的(而不是HTTP / 1.1串行队列)。例如,对请求2的响应可能在对请求1的响应之前到达。

    这解决了HTTP / 1.1的“流水线化”和消息排序问题,其中较长的请求/响应周期可能导致所有其他请求“等待”。

    还有其他特性和差异,但是在某些方面,这可能是主要特性(除了其他性能因素,例如标头压缩,二进制数据格式等)。