HTTP系列之HTTP版本 1.0 1.1 2.0 3.0 主要特性对比

文章目录

HTTP1.0 HTTP1.1 HTTP2.0 主要特性对比

HTTP1.0

无状态无连接:HTTP1.0默认浏览器和服务器保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器处理完成后立即断开TCP连接(无连接),服务器不跟踪每个客户端也不记录过去的请求(无状态)。

这种无状态性可以借助cookie/session机制来做身份认证和状态记录。而无连接就比较麻烦了。

无连接的特性导致最大的性能缺陷就是无法复用连接。每次发送请求的时候,都需要进行一次TCP的连接,而TCP的连接释放过程又是比较费事的。这种无连接的特性会使得网络的利用率非常低。

HTTP1.1

1、默认长连接:也就是多个请求和响应可以利用同一个 TCP 连接,而不是每一次请求响应都要新建一个TCP连接,减少了建立和关闭连接的消耗和延迟。

2、管道机制:HTTP/1.1 采用了长连接的方式,这使得管道(pipeline)网络传输成为了可能。即可在同一个 TCP 连接里面,客户端可以发起多个请求,只要第一个请求发出去了,不必等其回来,就可以发第二个请求出去,可以减少整体的响应时间。虽然引进了管道机制,但是当前存在诸多问题,且默认处于关闭状态。

服务器还是按照顺序,先回应 A 请求,完成后再回应 B 请求。要是前面的回应特别慢,后面就会有许多请求排队等着。这称为「队头堵塞」。

3、带宽优化:HTTP 1.1支持只发送header信息(不带任何body信息),如果服务器认为客户端有权限请求服务器,则返回100,否则返回401。客户端如果接受到100,才开始把请求body发送到服务器。

这样当服务器返回401的时候,客户端就可以不用发送请求body了,节约了带宽。

4、断点传输:在 HTTP/1.1 版本中,可以不必等待数据完全处理完毕再返回,服务器产生部分数据,那么就发送部分数据。这是支持文件断点续传的基础。

5、host:在HTTP 1.1中增加Host请求头字段后,WEB浏览器可以使用主机头名来明确表示要访问服务器上的哪个WEB站点,这才实现了在一台WEB服务器上可以在同一个IP地址和端口号上使用不同的主机名来创建多个虚拟WEB站点。

HTTP2.0

1、二进制传输:http2.0将请求和响应数据用帧的形式发送,并且它们采用二进制编码(http1.0基于文本格式)。多个帧之间可以乱序发送,根据帧首部的流标志可以重新组装。(从应用层解决队头阻塞但是传输层依然有该问题)

2、多路复用:基于二进制基础,可以只通过一个TCP链接就可以传输所有的请求数据。

3、Header压缩:http2.0开发了专门的"HPACK"算法,大大压缩了Header信息。

4、服务端推送:服务器不再完全被动地响应请求,也可以新建"流"主动向客户端发送消息。(例如,浏览器在刚请求html的时候就提前把可能会用到的JS,CSS文件发送给客户端,减少等待延迟,这被称为"服务端推送Server Push")

缺点:

1、TCP以及TCP+TLS/SSL建立连接的延迟

2、TCP的队头阻塞没有彻底解决(http2.0中,多个请求是跑在一个TCP管道中的,一旦丢包,TCP就要等待重传(丢失的包等待重新传输确认),从而阻塞该TCP连接中的所有请求)

HTTP3.0

1、集成了TLS加密功能

2、实现了快速握手功能,相当于TLS和TCP同时握手了

2、基于UDP,但是在上层的QUIC中实现了类似TCP的协议,同时也彻底解决TCP中队头阻塞的问题(单个"流"是有序的,可能会因为丢包而阻塞,但是其他流不会受到影响)

HTTP1.1的缺点:安全性不足和性能不高;

HTTP2.0是更安全更快的HTTPS,头部压缩,多路复用等技术充分利用了带宽,降低了延迟。

HTTP3.0的底层支撑协议QUIC基于UDP实现,又含TCP的特点,实现了又快又可靠的协议。

websocket

HTML5 开始提供的一种浏览器与服务器进行全双工通讯的网络技术,属于应用层协议。它基于 TCP 传输协议,并复用 HTTP 的握手通道。

WebSocket 使用 HTTP 协议进行连接,然后升级为 WebSocket 协议。在需要双向通信的应用场景下非常有用,实时性非常高且不受跨域限制。

特点:

双向通信:WebSocket 允许在同一个连接上同时发送和接收数据,从而实现实时双向通信。

持久连接:一旦建立了 WebSocket 连接,它会保持打开状态,直到显式关闭连接。

低延迟:WebSocket 的双向通信性质使得数据传输更加即时,相比传统的 HTTP 请求,减少了通信延迟。

轻量级:与 HTTP 相比,WebSocket 协议头较小,减少了数据传输时的开销。

支持跨域:WebSocket 允许在不同域名之间进行通信,通过协议和安全措施确保通信安全性。

HTTP2和websocket的服务端推送区别

1、http2.0需要客户端发起请求以后,进行相应,再附带推送,需要客户端发起请求。websocket不需要客户端发请求,就能实现推送。

2、http2.0的推送内容只是浏览器能够感知即存放在浏览器的缓存中,代码是无法获取到数据的,所以还得配合SSE获取数据。http2.0的推送内容典型场景:向后端请求一个html,服务器把html页面中的css,js等资源也推送到了浏览器,这是客户端发起请求时,直接在缓存中读取。websocket可以拿到数据,在代码中使用。

WebSocket 更适合实时、双向通信的场景,而 HTTP/2 的服务器推送更适合通过提前推送相关资源来提高性能的场景。

单工、半双工、全双工

单工:只支持数据在一个方向上传输

半双工:允许数据在两个方向上传输,但是在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信。

全双工:允许数据同时在两个方向上传输,它要求发送设备和接收设备都有独立的接收和发送能力。

tcp是全双工的,但它的上层可能支持半双工,比如http1.1,也有可能支持全双工,比如http2.0。

参考:

https://www.cnblogs.com/lzcnblogs/p/16667190.html

https://blog.csdn.net/weixin_53186633/article/details/123624445

https://www.bilibili.com/video/BV1vv4y1U77y

https://blog.csdn.net/weixin_43801836/article/details/127695498

https://blog.csdn.net/qq_44036439/article/details/129107830

相关推荐
Diamond技术流1 分钟前
从0开始学习Linux——网络配置
linux·运维·网络·学习·安全·centos
Spring_java_gg15 分钟前
如何抵御 Linux 服务器黑客威胁和攻击
linux·服务器·网络·安全·web安全
方方怪1 小时前
与IP网络规划相关的知识点
服务器·网络·tcp/ip
weixin_442643422 小时前
推荐FileLink数据跨网摆渡系统 — 安全、高效的数据传输解决方案
服务器·网络·安全·filelink数据摆渡系统
阑梦清川3 小时前
JavaEE初阶---网络原理(五)---HTTP协议
网络·http·java-ee
阿尔帕兹3 小时前
构建 HTTP 服务端与 Docker 镜像:从开发到测试
网络协议·http·docker
FeelTouch Labs4 小时前
Netty实现WebSocket Server是否开启压缩深度分析
网络·websocket·网络协议
千天夜5 小时前
使用UDP协议传输视频流!(分片、缓存)
python·网络协议·udp·视频流
长弓三石6 小时前
鸿蒙网络编程系列44-仓颉版HttpRequest上传文件示例
前端·网络·华为·harmonyos·鸿蒙
xianwu5436 小时前
反向代理模块
linux·开发语言·网络·git