http 1.0 / 1.1 / 2.0的区别

http 1.0 / 1.1 / 2.0的区别http1.0 / 1.1 / 2.0的区别

大家好,又见面了,我是你们的朋友全栈君。

1. http 1.0

  1.1 链接无法复用,即不支持持久链接:

          http 1.0 规定浏览器与服务器保持较短时间的链接,浏览器每次请求都和服务器经过三次握手和慢启动(基本思想是当TCP开始传输数据或发现数据丢失并开始重发时,首先慢慢的对网路实际容量进行试探,避免由于发送了过量的数据而导致阻塞)建立一个TCP链接,服务器完成请求处理后立即断开TCP链接,而且不跟踪每个浏览器的历史请求。

        注意:由于http 1.0每次建立TCP链接对性能的影响实在是太大,http1.1实现持久化链接之后,又反向移植到http 1.0上,只是默认是没有开启持久链接的,通过http的header部分的 Connection: KeepAlive 来启用

1.2 线头阻塞(Head of Line (HOL) Blocking)

               请求队列的第一个请求因为服务器正忙(或请求格式问题等其他原因),导致后面的请求被阻塞。

2. http 1.1

    2.1 支持持久链接(在request和response中的header中的connection是close或者Keep-Alive进行控制)

          一个TCP链接可以传送多个http请求和相应,减少了TCP建立链接和关闭链接的消耗。另外http1.1允许客户端不用等待上一次请求结果返回,就可以发出下一次请求,但服务器端必须按照接收到客户端请求的先后顺序依次回送响应结果,以保证客户端能      够区分出每次请求的响应内容。

2.2 支持http管道

不使用管道的http请求,在使用持久链接时,必须严格满足先进先出的队列顺序(FIFO),即发送请求,等待响应完成,再发送客户端队列中的下一个请求。管道可以让我们把 FIFO 队列从客户端(请求队列)迁移到服务器(响应队列),即客户端可以并行,服务端串行。客户端可以不用等待前一个请求返回,发送请求,但服务器端必须顺序的返回客户端的请求响应结果。
缺点:
a. 一个请求响应阻塞,就会阻塞后续所有请求
b. 并行处理请求时,服务器必须缓冲管道中的响应,从而占用服务器资源,如果有个响应非常大,则很容易形成服务器的受攻击面;
c. 响应失败可能终止 TCP 连接,从页强迫客户端重新发送对所有后续资源的请求,导致重复处理;
d. 由于可能存在中间代理,因此检测管道兼容性,确保可靠性很重要;
e. 如果中间代理不支持管道,那它可能会中断连接,也可能会把所有请求串联起来。

2.3 使用多个TCP链接

http1.1 在客户端排队所有请求,让后通过一个TCP持久链接,一个接一个的发送请求(如果有http管道还必须顺序等待服务端的顺序返回结果)。但实际中,浏览器的开发时不会这么笨,浏览器允许我们打开N个TCP链接(大多说浏览器是6个TCP链接,这个数字越大,客户端和服务器的资源占用越多,这个数据也只是感觉安全的数字而已)。
带来的好处:
1. 客户端可以并行发送最多 N个请求;
2. 服务器可以并行处理最多 N个请求;
3. 第一次往返可以发送的累计分组数量(TCP cwnd)增长为原来的 N 倍。
代价:
1.更多的套接字会占用客户端、服务器以及代理的资源,包括内存缓冲区和 CPU时钟周期;
2.并行 TCP 流之间竞争共享的带宽;
3.由于处理多个套接字,实现复杂性更高;
4.即使并行 TCP 流,应用的并行能力也受限制。

因此使用多个TCP链接只是权宜之计,后续的http 2.0支持多路复用,很好的解决了上述问题。

2.4 http 1.1 增加了请求头和响应头来扩充功能

    举例:
         a. 支持Host请求:
         b. Connection: 请求头的值为Connection时,客户端通知服务器返回本次请求结果后保持连接;Connection请求头的值为close 时,客户端通知服务器返回本次请求结果后关闭连接
         c. 支持断点续传:
         d.身份认证:
         e.状态管理:
         f. 缓存处理:

2.5 域名分区

域名分区是思想是将原来集中到一个服务器上的资源分布到多个服务器上,这样就可以突破浏览器的链接限制(一般是6个),提高并行能力。
代价:
1. 每多一台主机都要多一次的 DNS 查询,每多一个套接字都会多消耗两端的一些资源;
2.必须手工分离一台主机上的资源到多台;.
实际实践中,效果并不是很明显,反而导致被滥用。

2.6 http的header的优化

目前所有的header请求都是以没有经过压缩的纯文本的形式发送(通常会有600`1000字节),而通常使用的http请求body却很少(10~200字节),和header相比,显得很少,特别是在使用了cookie之后,这样的矛盾就更加突出,因此要减少header的数据。

2.7 减少连接次数

即将需要多次才能获取的文件或资源组合并成一个,通过一次网络请求获取。这样减少了协议的开销,间接地将服务器端的管道思维移植到了客户端。缺点:增加复杂性,更缓存带来负担,页面的分步显示,改成一次显示,在网络慢的时候影响用户体验。

2.8 嵌入小的文件

即将资源嵌入文档(通过URI嵌入图片,音频或PDF),可以减少请求次数。嵌入资源作为页面的返回一部分一次返回,即如果在多个页面中都嵌入同样的资源,那么这个资源将会随着每个页面的加载而被加载,从而增大每个页面的总体大小,如果嵌入资源被更新,客户端只能重新获取有效的资源。
实践:一般只考虑嵌入1~2KB一下的资源
参照建议:
1. 如果文件很小,而且只有个别页面使用,可以考虑嵌入;
2.如果文件很小,但需要在多个页面中重用,应该考虑集中打包;
3. 如果小文件经常需要更新,就不要嵌入了;
4. 通过减少 HTTP cookie 的大小将协议开销最小化。

3. http 2.0

HTTP 2.0把解决性能问题的方案内置在了传输层,通过多路复用来减少延迟,通过压缩 HTTP首部降低开销,同时增加请求优先级和服务器端推送的功能。

  3.1 支持多路复用

         多路复用允许同时通过单一的 HTTP 2.0 连接发起多重的请求-响应消息,即所有HTTP 2.0 连接都是持久化的,而且客户端与服务器之间也只需要一个连接即可,所有数据流共用同一个连接 ,减少了因http链接多而引起的网络拥塞(在 HTTP1.1 协议中,同一时间,浏览器会针对同一域名下的请求有一定数量限制),解决了慢启动针对突发性和短时性的http链接低效的问题。

3.2 将通信的基本单位缩小为帧

             即应用层(HTTP)和传输层(TCP or UDP)之间增加一个二进制分帧层,因此在多向请求和响应时,客户端和服务器可以把HTTP消息分解为互不依赖的帧,然后乱序发送,最后再在另一端把它们重新组合起来,解决了http 1.*的对手阻塞问题。 

3.3 首部压缩

              http 2.0支持DEFLATE和HPACK 算法的压缩。

3.4 服务端推送

          指客户端请求之前发送数据的机制,在 HTTP 2.0 中,服务器可以对客户端的一个请求发送多个响应。

3.5 请求优先级

   HTTP 2.0 使用一个31比特的优先值,0表示最高优先级, 2(31)-1表示最低优先级,服务器端就可以根据优先级,控制资源分配,优先处理和返回最高优先级的请求帧给客户端。



参考文献:
1.http://www.jianshu.com/p/52d86558ca57

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/149540.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 树莓派4B安装64位系统 以及基础配置

    树莓派4B安装64位系统 以及基础配置最近在使用一个SDK时发现只提供了linux64版本的,而我用的树莓派系统是32位的。查了一下发现官方有提供64位版本的,开始了重装系统,总结了一下基础配置包括换源,远程连接,中文输入法,摄像头等配置。大纲准备工具*1.SD卡格式化*2.烧制工具*3.系统镜像烧制镜像*1.格式化sd卡*2.打开RaspberryPiImager进行烧制*3.chooseSD选择需要烧制到的SD卡启动前的配置*1.配置WiFi*2.打开ssh*3..

  • Matlab代码之plot函数的坐标点显示

    Matlab代码之plot函数的坐标点显示plot函数的xlabel、ylabel、title、text、legend1、在图像某个位置显示文字信息,2、用text()显示plot函数的坐标点;3、用legend()在一张图同时显示不同曲线;4、用xlabel()、ylabel()、title()显示横纵坐标和标题;5、用subplot在一张画布上画多个图像;新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个

    2022年10月15日
  • oracle 锁表 解锁 批量解锁[通俗易懂]

    oracle 锁表 解锁 批量解锁[通俗易懂]oracle锁表,解锁

  • mac系统pycharm配置python环境_mac python开发环境

    mac系统pycharm配置python环境_mac python开发环境一、下载安装Python3解释器使用Python3Python之父GuidovanRossum在邮件列表上宣布Python2.7将于2020年1月1日终止支持。用户如果想要在这个日期之后继续得到与Python2.7有关的支持,则需要付费给商业供应商。12**GuidovanRossum表示:**Let’snotplaygameswithsemantics.**T…

  • 词向量简介「建议收藏」

    词向量简介「建议收藏」最近深度学习技术有了突飞猛进的发展,为语音识别、图像识别、自然语言处理(NLP)提供了强大的工具,为这些领域今后的快速发展提供了新的契机。深度学习为自然语言处理带来的最令人兴奋的突破是词向量(wordembedding)技术。词向量技术是将词转化成为稠密向量,并且对于相似的词,其对应的词向量也相近。在自然语言处理应用中,词向量作为深度学习模型的特征进行输入。因此,最终模型的效果很大程度上取

  • 六、小程序|App抓包-移动端抓包app-抓包「建议收藏」

    六、小程序|App抓包-移动端抓包app-抓包「建议收藏」小程序|App抓包移动端抓包app-抓包 ———-IOS设备系统———一、IOS抓包IOS(thor+anubis)app应用市场下载即可:首次安装需要配置证书:抓包:简单测试抓取部分数据包:查看详细数据包内容:点击数据包查看详情:一直摁着,选择重放可进行重放测试thor跳转anubisanubis相关功能点和界面:重放记录:可修改重放:也可进行其他的导出操作:可以将数据包导出联合burp重放———-Android设备系统———二、android移动

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号