zoukankan      html  css  js  c++  java
  • TCP队头阻塞和HTTP队头阻塞

    1. TCP队头阻塞

    TCP数据包是有序传输,中间一个数据包丢失,会等待该数据包重传,造成后面的数据包的阻塞。

    2. HTTP队头阻塞

    http队头阻塞和TCP队头阻塞完全不是一回事。

    http1.x采用长连接(Connection:keep-alive),可以在一个TCP请求上,发送多个http请求。

    有非管道化和管道化,两种方式。

    非管道化,完全串行执行,请求->响应->请求->响应...,后一个请求必须在前一个响应之后发送。

    管道化,请求可以并行发出,但是响应必须串行返回。后一个响应必须在前一个响应之后。原因是,没有序号标明顺序,只能串行接收。

    管道化请求的致命弱点:

    1. 会造成队头阻塞,前一个响应未及时返回,后面的响应被阻塞
    2. 请求必须是幂等请求,不能修改资源。因为,意外中断时候,客户端需要把未收到响应的请求重发,非幂等请求,会造成资源破坏。

    由于这个原因,目前大部分浏览器和Web服务器,都关闭了管道化,采用非管道化模式。

    无论是非管道化还是管道化,都会造成队头阻塞(请求阻塞)。

    解决http队头阻塞的方法:

    1. 并发TCP连接(浏览器一个域名采用6-8个TCP连接,并发HTTP请求)
    2. 域名分片(多个域名,可以建立更多的TCP连接,从而提高HTTP请求的并发)

    2. HTTP2方式

    http2使用一个域名单一TCP连接发送请求,请求包被二进制分帧,不同请求可以互相穿插,避免了http层面的请求队头阻塞。
    但是不能避免TCP层面的队头阻塞。

  • 相关阅读:
    Windows系统安装Anaconda
    python的下载及安装
    VMware的虚拟网络编辑器,在配置的过程中没有桥接模式!(虚拟机卸载)
    常见端口查询
    《网络攻防实践》第三次作业实践二
    用ssh方式在kali与Windows之间传输文件
    oracle常用函数汇总
    JSON 日期格式带 T 问题
    sql远程连接卡死解决方法
    DropdownList的处理总结
  • 原文地址:https://www.cnblogs.com/mengff/p/12724641.html
Copyright © 2011-2022 走看看