HTTP/1.0 版的主要缺点是,每个TCP连接只能发送一个请求。发送数据完毕,连接就关闭,如果还要请求其他资源,就必须再新建一个连接。

http1.1优点:

1、HTTP 1.1 版引入了持久连接(persistent connection)也就是长连接,即TCP连接默认不关闭,可以被多个请求复用

2、管道化,在同一个TCP连接里面,客户端可以同时发送多个HTTP请求,而不用等待一个个响应

3、支持 断点续传

缺点:

虽然1.1版允许复用TCP连接,但是同一个TCP连接里面,所有的数据通信是按次序进行的。服务器只有处理完一个回应,才会进行下一个回应。要是前面的回应特别慢,后面就会有许多请求排队等着。这称为"队头堵塞"(Head-of-line blocking)

HTTP 2.0

1、新的二进制格式

HTTP1.x的解析是基于文本。基于文本协议的格式解析存在天然缺陷,文本的表现形式有多样性,要做到健壮性考虑的场景必然很多,二进制则不同,只认0和1的组合。基于这种考虑HTTP2.0的协议解析决定采用二进制格式,实现方便且健壮。

2、多路复用

多路复用(MultiPlexing),即连接共享,即每一个request都是是用作连接共享机制的。一个request对应一个id,这样一个连接上可以有多个request,每个连接的request可以随机的混杂在一起,接收方可以根据request的 id将request再归属到各自不同的服务端请求里面。

举例来说,在一个TCP连接里面,服务器同时收到了A请求和B请求,于是先回应A请求,结果发现处理过程非常耗时,于是就发送A请求已经处理好的部分, 接着回应B请求,完成后,再发送A请求剩下的部分。

3、头信息压缩

HTTP 协议不带有状态,每次请求都必须附上所有信息。所以,请求的很多字段都是重复的,比如CookieUser Agent,一模一样的内容,每次请求都必须附带,这会浪费很多带宽,也影响速度。

HTTP/2 对这一点做了优化,引入了头信息压缩机制(header compression)。一方面,头信息使用gzipcompress压缩后再发送;另一方面,客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,以后就不发送同样字段了,只发送索引号,这样就提高速度了。

4、服务器推送

HTTP/2 允许服务器未经请求,主动向客户端发送资源,这叫做服务器推送(server push)。

服务端推送能把客户端所需要的资源伴随着index.html一起发送到客户端,省去了客户端重复请求的步骤。正因为没有发起请求,建立连接等操作,所以静态资源通过服务端推送的方式可以极大地提升速度。具体如下:

  • 普通的客户端请求过程:

  • 服务端推送的过程:

HTTP2.0的多路复用和HTTP1.X中的长连接复用有什么区别?

  • HTTP/1.* 一次请求-响应,建立一个连接,用完关闭;每一个请求都要建立一个连接;

  • HTTP/1.1 Pipeling解决方式为,若干个请求排队串行化单线程处理,后面的请求等待前面请求的返回才能获得执行机会,一旦有某请求超时等,后续请求只能被阻塞,毫无办法,也就是人们常说的线头阻塞;

  • HTTP/2多个请求可同时在一个连接上并行执行。某个请求任务耗时严重,不会影响到其它连接的正常执行;

最新文章

  1. 启动Tomcat报异常host-manager does not exist or is not a readable directory
  2. js cookie存储方法
  3. NetBeans 8.0 连接远程服务器
  4. 使用ContentProvider管理联系人------添加联系人
  5. 【JavaScript】日期和数字格式化
  6. 开扒php内核函数,第二篇 hex2bin
  7. C#POP3协议实现SSL验证登陆GMAIL
  8. Java基础知识强化之多线程笔记04:并行和并发 区别
  9. PHP安全编程:跨站脚本攻击的防御(转)
  10. MyBatis(3):SQL映射
  11. HDU -2670 Girl Love Value
  12. 一条insert语句批量插入多条记录
  13. Mybatis基础入门 I
  14. LPC1788的内部EEPROM使用
  15. 分享两个网址,一个是使用mssql自带的跟踪工具和分析工具
  16. Xcode极速代码,征服Xcode
  17. matlab-画个拱桥和倒影?
  18. C++基础学习一(基础之基础)
  19. 解决input框黄色背景问题(转)
  20. java实现栈-使用LinkedList

热门文章

  1. bzoj 1941 Hide and Seek
  2. JavaScript对象模型-执行模型
  3. RDA 常用API
  4. 动画库tween.js
  5. 数字货币期货与现货JavaScript量化策略代码详解汇总
  6. 《Google软件测试之道》心得笔记1
  7. idea 启动时报 error:java 无效的源发行版11
  8. C++入门知识点总结
  9. [USACO 2012 Mar Silver] Landscaping【Edit Distance】
  10. 459 Repeated Substring Pattern 重复的子字符串