首页 > 其他分享 >HTTP1.0、HTTP1.1、HTTP2.0的区别

HTTP1.0、HTTP1.1、HTTP2.0的区别

时间:2023-12-21 13:22:25浏览次数:32  
标签:HTTP1.0 HTTP1.1 HTTP 请求 TCP 连接 HTTP2.0

  当谈到网络通信协议时,大家都熟悉的就是HTTP(Hypertext Transfer Protocol),它是一种用于在 Web 浏览器和服务器之间传输数据的协议。随着技术的发展,HTTP也在不断演进,从HTTP1.0发展到了HTTP2.0,带来了许多新的特性和改进。 

一、如何通过浏览器查看当前的http版本:

谷歌:

 火狐:

 

二、HTTP协议层次结构图

现在主流浏览器大部分使用的都是HTTP/1.1协议,也有部分支持HTTP/2.0;绝大部分网站都升级为HTTPS更保证安全性

 三、HTTP1.0和HTTP2.0的区别

1. 连接复用:
HTTP1.0:每个HTTP请求都需要建立一个新的TCP连接,请求结束后立即关闭连接。这样的方式会导致每个请求都需要重新建立连接,增加了延迟和开销。

HTTP2.0:引入了多路复用技术,允许在同一个TCP连接上并发(发送多个请求和响应),避免了建立和关闭多个连接的开销,提高了性能和效率。

原理实现:

 HTTP/2引入二进制数据帧和流的概念,其中帧对数据进行顺序标识,如下图所示,这样浏览器收到数据之后,就可以按照序列对数据进行合并,而不会出现合并后数据错乱的情况。同样是因为有了序列,服务器就可以并行的传输数据,这就是流所做的事情,这些帧在传输完成后根据ID组合成对应的数据。

2. 请求-响应方式:
HTTP1.0:采用的是单向请求-响应模式,即每个请求只能对应一个响应,请求和响应是一一对应的关系。
HTTP2.0:引入了Server Push机制,服务器可以在客户端请求之前主动推送相关资源,避免了客户端重复请求的等待时间,提高了页面加载速度。
3. 头部压缩:
HTTP1.0:每个请求和响应的头部都包含大量的重复信息,造成了较大的网络传输开销。
HTTP2.0:使用了HPACK算法对头部进行压缩,减少了头部的大小,降低了网络传输开销。
4. 二进制协议:
HTTP1.0:采用文本形式进行数据传输,易于阅读和调试,但是传输效率较低。
HTTP2.0:采用二进制格式传输数据,减少了解析的复杂性,提高了传输效率。
5. 流控制和优先级:
HTTP1.0:没有流控制和优先级的概念,所有请求都是按照发送的顺序进行处理。
HTTP2.0:引入了流控制和优先级的机制,可以根据需求对请求进行优先级排序和流量控制,确保重要请求的及时处理。
6. 长连接支持:
HTTP1.0:基本上都是短连接,每个请求响应完成后立即关闭连接。
HTTP2.0:支持长连接,即一个TCP连接可以承载多个请求和响应,减少了连接的建立和关闭次数,提高了性能。

四、HTTP1.1的致命缺点
1.明文传输,安全性不高
2.当有多个请求同时被挂起时,就会拥塞请求通道,导致后面请求无法发送(没有真正的解决队头阻塞,多条TCP连接竞争带宽)
3.臃肿的消息首部:HTTP/1.1能压缩请求内容,但是消息首部不能压缩(消息首部占请求绝大部分)

五、相比于HTTP1.1,HTTP2.0的主要优点
a.HTTP 1.0需要使用keep-alive参数来告知服务器端要建立一个长连接,而HTTP1.1默认支持长连接
b.采用二进制帧封装(HTTP2.0会将所有传输的信息分割为更小的消息和帧,采用二进制的格式进行编码;HTTP1.x的解析是基于文本的)
c.传输变成多路复用(HTTP2.0所有的请求都是通过一个 TCP 连接并发完成;HTTP/1.x 虽然通过 pipeline 也能并发请求,但是多个请求之间的响应会被阻塞)
d.服务器端推送(HTTP2.0引入了Server Push机制,服务器可以在客户端请求之前主动推送相关资源)
e.头部压缩(HTTP2.0使用了HPACK算法对头部进行压缩,网络上传输更快)
f.流控制和优先级(HTTP2.0对请求进行优先级排序和流量控制,确保重要请求的及时处理)
g.流量控制算法优化

六、HTTP/3.0(持续完善中)

基于Google的QUIC,HTTP3 背后的主要思想是放弃 TCP,转而使用基于 UDP 的 QUIC 协议。

为了解决HTTP/2.0中TCP造成的队头阻塞问题,HTTP/3.0直接放弃使用TCP,将传输层协议改成UDP;但是因为UDP是不可靠传输,所以这就需要QUIC实现可靠机制

QUIC 是一个在 UDP 之上的伪 TCP + TLS + HTTP/2 的多路复用的协议。

QUIC 也是需要三次握手来建立连接的,主要目的是为了确定连接 ID。

总结:

  HTTP2.0相对于HTTP1.0在性能和效率上有了明显的改进。通过连接复用、多路复用、头部压缩、Server Push等特性,HTTP2.0在传输速度、网络资源利用率和用户体验方面都有了显著的提升。然而,要注意的是,HTTP2.0在某些特定的网络环境下可能会遇到兼容性问题,需要进行适当的配置和优化。

随着互联网的不断发展,HTTP协议也在不断演进,HTTP3(基于UDP的QUIC协议)已经出现,并带来了更多的改进。了解并掌握不同版本的HTTP协议对于开发者来说是非常重要的,可以根据具体的业务场景和需求选择合适的协议版本,以提供更好的用户体验和性能。

标签:HTTP1.0,HTTP1.1,HTTP,请求,TCP,连接,HTTP2.0
From: https://www.cnblogs.com/beatle-go/p/17918358.html

相关文章

  • nginx在代理到upstream时转换http1.1为http1.0,长连接转为短连接
    nginx在代理到upstream时的默认行为最近准备用openresty替换nginx,替换的效果当然是需要保证效果和nginx一致,不然可能就会导致线上在用的服务出现问题。替换成openresty后,在本地进行了一个请求,header如下:POST/servlet/jsonHTTP/1.1Host:10.80.121.xxx:9900Connection:keep......
  • HTTP1.0、HTTP1.1、HTTP2.0 协议的特点
    HTTP(HypertextTransferProtocol)是一种用于在Web浏览器和Web服务器之间传输数据的协议。HTTP的版本有很多,其中比较常见的有HTTP1.0、HTTP1.1和HTTP2.0,它们有各自的特点。HTTP1.0的特点:1.每个请求/响应需要建立新的TCP连接,并在完成后关闭连接,导致较高的延迟。2.......
  • http1.0和2.0的区别
    1.新的二进制格式(BinaryFormat):HTTP1.x的解析是基于文本。(文本的表现形式有多样性,要考虑的场景很多才能做到健壮性)基于这种考虑HTTP2.0的协议解析决定采用二进制格式,实现方便且健壮。2.HTTP2.0比HTTP1.0有路复用(MultiPlexing):即连接共享,即每一个request都是是用作连接共享机制的......
  • http3.0和http2.0的比较
    从HTTP/1.1到HTTP/2,HTTP协议一直都是使用TCP作为传输协议。然而,就在最新的HTTP/3,HTTP就直接把TCP抛弃了,向孤立无援的UDP伸出了援手,基于UDP协议的基础上,在应用层实现了一个可靠的传输协议——QUIC。 很多同学可能就好奇了,HTTP都用TCP都用了几十年了,而且T......
  • 简述HTTP1.0,1.1,2.0,3.0的主要区别以及QUIC协议
    HTTP/1.0(构建可拓展性)请求中新增协议版本信息引入HTTP头概念响应中新增状态码默认使用短连接:浏览器每使用一个静态资源就会建立连接直到任务结束中断连接HTTP/1.1......
  • python-httpx 发送http2.0时代请求
    原文,自己做个笔记用https://blog.51cto.com/u_15127674/3872190官方文档的地址https://www.python-httpx.org/我们在日常开发中,经常会发送各种各样的网络请求。Python......
  • http2.0初体验
    闲来无事,登录了练习平台找了个简单题练手,涉及到了新的内容,记录一下。现象:网页和charles重放可以拿到返回结果,通过postman和代码请求403或者其他原因后端进行了http2......
  • HTTP1.0、HTTP1.1和HTTP2.0的区别
    HTTP1.0、HTTP1.1和HTTP2.0的区别摘自:https://www.jianshu.com/p/be29d679cbff一、HTTP的历史早在HTTP建立之初,主要就是为了将超文本标记语言(HTML)文档从Web服务器传......
  • HTTP1.0、1.1和2.0的区别
    一、HTTP1.0HTTP协议的第二个版本,第一个在通讯中指定版本号的HTTP协议版本HTTP1.0 浏览器与服务器只保持短暂的连接,每次请求都需要与服务器建立一个TCP连接服务器完成......
  • HarmonyOS初探03——DevEco Studio创建应用问题ERROR Unable to tunnel through proxy
    问题在内网环境下首次使用DevEcoStudio创建应用时,可能会报如下问题:ERROR:Unabletotunnelthroughproxy.Proxyreturns"HTTP/1.1403Openproxy_Blocked_URL_list"我......