http(3)

作者: xandone | 来源:发表于2019-01-08 15:42 被阅读5次

    1.http/1.0
    一个http的请求过程,就是建立一个socket通讯的过程,http是不保存状态的协议,因此每次完成一次http请求,就会断开一次TCP连接。
    由于互联网的飞速发展,http通讯过程中,传输的文本数据量越来越大,因此,某些请求都会建立很多次socket,造成无谓的TCP连接和断开,增加了通讯量的开销。
    大致如下:
    建立TCP连接
    http请求/响应
    断开TCP连接
    ...
    建立TCP连接
    http请求/响应
    断开TCP连接
    直到http请求的文本全部获取,中间可能经历了N次的TCP连接。

    2.http/1.1
    因而在Http/1.1的版本中,增加了持久连接的方法(keep-alive),http长连接,即只要任意一方没有提出断开连接,那么TCP保持连接状态,一般情况由client这边主动断开连接,但是也不排除服务器不支持长连接,或者等待时间长而导致服务器断开TCP
    大致如下:
    建立TCP连接
    http请求/响应
    ...
    http请求/响应
    断开TCP连接
    很明显省去了中间的多次TCP连接的过程,提升了web传输的效率,节省了带宽。(注:除非手动附带connection:close的首部,否则默认开启持久连接。)
    虽说如此,但是持久化连接和非持久化连接都有一个共同的缺点,每次http的请求都需发送header,除了传输报文主体外,还需传输交换大量的header信息。

    3.WebSocket的出现:
    WebSocket是HTML5出的东西(协议)
    http发送请求后,建立一个TCP连接,之后就不需要继续发送http请求,依然可以和服务端保持长连接,同时,websockt
    还是一个双通道的连接,任一端都可以发送和接受消息。
    虽然websocket实现了长连接,但是这种长连接可能会出现一种假死状态,因为现实网络中,client端和server端之间存在着复杂的中间网络层,很多时候,
    由于C和S端长时间没有互相通讯,TCP可能出现自动断开的情况,而中间网络层在设计上做了层层的缓存处理,websocket在断开之后,仍然会存在一种没有
    断开的假象。
    解决方法
    服务器和客户端能够发送 Ping/Pong Frame(心跳)。这种 Frame 是一种特殊的数据包,它只包含一些元数据而不需要真正的 Data Payload,
    可以在不影响 Application 的情况下维持住中间网络的连接状态。

    相关文章

      网友评论

          本文标题:http(3)

          本文链接:https://www.haomeiwen.com/subject/nzfbrqtx.html