在长连接的基础上,为了解决阻塞请求问题,HTTP1.1进一步地支持在持久连接上使用管道化(pipelining)特性,这是相对于keep-alive连接的又一性能优化。

1. 管线化概念

之前需要发送请求之后必须等待并且接收到回应之后,才能发送下一个请求。管线化技术出现之后,就不用等待就可以发送下一个请求了。管线化能够做到同时并行发送多个请求,而不需要一个接着一个地等待响应。

2. http1.1的队首阻塞

开启管道化后, 如果前面收到的一个请求,在服务器端处理的时间很长,生成响应需要很多时间,那么对于后面的已经处理完生成响应的请求来说,它们只能阻塞等待,等待前面的响应发送完后,自己才能被发送出去(即使该请求的响应已经生成),造成了“队首阻塞”问题。

解决http队头阻塞的方法:

  • 并发TCP连接(浏览器一个域名采用6-8个TCP连接,并发HTTP请求)

  • 域名分片(多个域名,可以建立更多的TCP连接,从而提高HTTP请求的并发)

  • HTTP2方式(多路复用特性)

3. HTTP2方式(多路复用特性)

并发请求,非阻塞的,可以在一条TCP通道同时发送多个请求,不一定要按照顺序,非阻塞的,先响应先回来,响应式时也不用等上一个请求先响应,这些请求都有唯一标识,所以可以无序。

3.1 实现方式

  • HTTP/2将发送的消息由文本形式转换成了二进制数据流方式,一条消息被拆分成多个帧,帧是最小的通信单位,每个帧都有编号,这些二进制帧数据流到达另一端后再根据帧的编号进行组装。
  • 帧在客户端和服务器端的TCP连接上是双向传输的,以字节流的方式,互不干扰(因为编码和封装方式),可以交错并行发送,只要当前TCP连接可用。
  • 客户端和服务器端接收到数据流后,再根据帧的编号进行组装,得到完整的消息,以此解决队首阻塞问题。

3.2 与keep-alive的比较

  • 共同点: 都可以复用同一条TCP通道
  • 区别:
    keep-alive :有顺序,有阻塞的请求
    step1.请求 a.html
    step2.响应 a.html
    step3.请求 b.css
    step4.响应 b.css

【参考】

  1. HTTP详解长短连接,管道化,队头阻塞及它们之间的关系 csdn

(chap2 简单的Http协议) HTTP性能优化之管线化pipelining相关推荐

  1. (chap2 简单的Http协议) HTTP性能优化之持久连接Keep Alive

    1. 持久连接节省流量 在一开始的HTTP协议中,每进行一次HTTP 通信就断开一次TCP连接. 在请求一个很多资源的HTML页面的时候,每次连接都会造成无所谓的TCP连接的建立和断开,增加了通信量的 ...

  2. (chap 2 简单的Http协议) HTTP性能优化之Cookie技术

    1. 工作原理 Cookie技术通过在请求和响应报文中写入 Cookie信息来控制客户端的状态.Cookie会根据从服务端发送的响应报文中的一个称set-Cookie的首部字段中,通知客户端保存Coo ...

  3. (chap2 简单的Http协议) HTTP方法(2)其他方法

    1. PUT方法 传输文件. 就像FTP协议中的请求文件上传一样,要求在请求报文的实体中包含文件内容,然后保存到请求的URI指定的位置. 鉴于HTTP1.1的PUT方法自身不带有验证机制,任何人都可以 ...

  4. (chap2 简单的Http协议) 请求报文和响应报文

    1. HTTP协议规定,请求从客户端发出,最后服务器端响应该请求并返回.换句话说,肯定是先从客户端开始建立通信的,服务器端在没有接收到请求之前不会发送响应. 2. client 发送的内容: GET ...

  5. Java性能优化(12):最小化类和成员可访问能力

    类和接口是Java程序设计语言的核心,它们也是Java语言的基本抽象单元.Java语言提供了许多强大的基本元素,供程序猿来设计类和接口. 要想区别一个设计良好的模块与一个设计不好的模块,最重要的因素是 ...

  6. 项目性能优化(页面静态化2)

    对于商品详情页,因查询数据量大,而且是用户频繁访问的页面,为了减少数据库查询次数,提升页面响应效率,也要对详情页进行静态化处理. 对于首页广告的数据,因变化非常的频繁,可以使用定时任务进行静态化.对于 ...

  7. 鸟瞰前端 , 再论性能优化

    欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 导语 : 从事前端有6年 的时间了,从最开始的美工到重构再到偏向js逻辑开发的前端开发,一直在前端这个行业里面摸索和学习,我现在将自己这些 ...

  8. C++ 应用程序性能优化,第 6 章:内存池

    引言 本书主要针对的是 C++ 程序的性能优化,深入介绍 C++ 程序性能优化的方法和实例.全书由 4 个篇组成,第 1 篇介绍 C++ 语言的对象模型,该篇是优化 C++ 程序的基础:第 2 篇主要 ...

  9. QML Profiler性能优化教程

    QML Profiler 2018年1月26日 vincent 对于一个程序的开发,性能优化是开发中的一个重要步骤. 我们肯定不希望开发出来的程序表现出卡顿,最好是处处流畅,丝滑般的体验. 对于C++ ...

最新文章

  1. MoreUnit与MoreUnit
  2. tftp ubuntu安装
  3. 八皇后问题 (递归 搜索)
  4. 程序员究竟能干多少年?用数据说话!
  5. JAva入门 活着_java基础回顾
  6. centos7下安全访问远程服务器
  7. SpringBoot的yml配置文件
  8. 大数据时代的电信运营商的机遇
  9. python学习高级篇(part1)--类属性
  10. Win7环境下VS2010配置Cocos2d-x-2.1.4最新版本号的开发环境
  11. CodeBlock调试(DeBug)指南
  12. MySQL 中 declare 声明的局部变量和 @var 会话变量的使用介绍
  13. LCD液晶显示屏颜色显示波长研究与总结?
  14. “我一年赚100万,这个项目告诉你也无妨!”
  15. 【转】十大顶级奢侈品服装品牌
  16. IAR使用ST-Link下载仿真
  17. 魅族MX5和努比亚布拉格手机参数对比
  18. ★会用这两键,你就是电脑高手了
  19. jqurey相关知识点
  20. Android Audio代码分析8 - AudioHardwareALSA::openOutputStream函数

热门文章

  1. 9.C++弱引用智能指针weak_ptr的用处
  2. Vue 之qs 使用详解
  3. html视频海报代码,如何在网站头部添加视频海报?添加视频海报的方法(代码示例)...
  4. c语言 倒计时不清屏_打字游戏超细讲解(C语言基础小游戏)
  5. 数据中心供电有多重要,看看这件事就知道了
  6. 供配电负荷计算方法详解
  7. 数据中心太废电?为省电费阿里和微软是这么做的....
  8. redis安装 linux步骤,【linux安装redis完整步骤】
  9. Python之pandas:pandas的get_dummies函数简介(将分类变量转为哑变量)及其使用方法之详细攻略
  10. AI公开课:19.04.18俞益洲—深睿医疗CS《计算机视觉的应用与落地》课堂笔记以及个人感悟