HTTP/1.0 HTTP/1.1、HTTP/2、HTTP/3 都做了啥

简介: 简单的说是,超过普通文本。但具体一些,咋们说的普通文本一般是值文字组成的文章。但是在网页中,有这么一种文本,可以是文本、图片、音频、视频等组成。但是最关键的是里面还可以有超链接,从一个文本跳转到另外一个文本。

概念


http作为一个互联网人都不模式,全称是超⽂本传输协议,也就是HyperText Transfer Protocol。要理解这个概念还是有点东西的,我们把这个名词拆分开来就是以下三个部分:


  • 超文本
  • 传输
  • 协议


超文本


简单的说是,超过普通文本。但具体一些,咋们说的普通文本一般是值文字组成的文章。但是在网页中,有这么一种文本,可以是文本、图片、音频、视频等组成。但是最关键的是里面还可以有超链接,从一个文本跳转到另外一个文本。


html (HyperText mark language)是超文本的一种格式,也可以说是一种规范吧。


传输


这个名称大家肯定不陌生,物品从一个地方到另一个地方就叫做传输。


但是我们的http可以是从客户端把报文传输给服务端,也可以从服务端把数据传给客户端,这就是一种双向的传输方式。


协议


协议的话就更好理解了,在同一环境下个体双方需要满足一定的规范,如:每个社会公民都需要遵纪守法,这个遵纪守法就是一种协议


http 是⼀个⽤在计算机世界⾥的协议。它使⽤计算机能够理解的语⾔确⽴了⼀种计算机之间交流通信的规范(两个以上的参与者),以及相关的各种控制和错误处理⽅式(⾏为约定和规范)。


那么合起来的概念就是: HTTP 是⼀个在计算机世界⾥专⻔在「两点」之间「传输」⽂字、图⽚、⾳频、视频等「超⽂本」数据的「约定和规范」


http 1.0特征


优点


http1.0 是非常多的优点,把我们带入了互联网的时代


1.http/1.0 相对来说是比较简单的, 基本的报文是 请求头加上请求体(header + body),头部信息也是 key-value的简单是形式;


2.http 1.0 是灵活并且易拓展的, 协议中的请求方法, url, port, 和头部信息等都可以由开发人员自行规定。


3.跨平台的,http 出现带来的最大的好处就是跨平台,只要你满足我的传输协议,就可以不限制平台,这也使得http的应用变的非常多,从以前的 C端, 到现在B端等


缺点


万物都是一把双刃剑,有好的一面,也会有坏的一面。那么在http1.0的时代有哪些问题呢?


1.http传输是无状态的,意味着如果不做状态处理,那么谁都可以访问服务器,毕竟服务又不认识人。解决这种办法有cookie, session, token, 到后来的jwt等


2.明文传输。这里纠正一个概念,不是说使用get传输方式就是明文传输。post在也是一样的,我们在调试的时候都可以通过抓包工具来获取到对应的数据包。明文传输无疑是在将自己的信息在互联网上裸奔。解决这个明文传输的方式那就是 https,https 就是基于http是可拓展的基础上,在tcp 和 http之间,增加了一个ssl/tls层。


3.http 1.0 还有一个最要命的缺点是他的网络响应方式,串行响应的模式,必须要等上一次请求回来才能对下一个请求进行响应。这里如果上一个请求卡死了,那么就会导致整个网站卡死,获取不到数据,这种行为也叫做 队头阻塞,还有就是每一次的网络请求都需要做三次握手和四次挥手,没有长连接是一个很大的问题。

看到http1.0 有那么多的问题,那么在http1.1 2.0 3.0 都是在对问题进行优化的


http 1.1


http 1.1 主要解决是


HTTP1.0 每一次连接都需要三次握手和四次挥手(每一次发送请求都要等前一次请求回来后),而且是串行的请求方式,增加额外的通信开销;


解决http1.0无法长连接的问题


1.长连接


在http 1.1 中可以通过在请求头中的 connection:keey-alive 来告诉服务器我当前需要使用长连接的方式(持久连接)。这样做的好处是于减少了TCP 连接的᯿复建⽴和断开所造成的额外开销,减轻了服务器端的负载。


持久连接的特点是,只要任意⼀端没有明确提出断开连接,则保持 TCP 连接状态。


5b90843235f3a9a857c7448e28b11a22.png


2.管道⽹络传输


基于 http1.1 中有长连接的功能,成就了管道传输(pipeline)


管道传输的概念是,每一次请求我都可以不用等前面的请求响应结束后,我再来请求后面的请去。具体的图像图下:


62c2becfe7e15ba79bf86bcc39638f31.png


这种管道的传输方式也是需要按照请求的顺序来返回的。「请求 - 应答」的模式加剧了 HTTP 的性能问题。 容易发生队头阻塞。


http/1.1 的瓶颈


1.服务器是按请求的顺序响应的,如果服务器响应慢,会招致客户端⼀直请求不到数据,也就是队头阻塞;


2.没有请求优先级控制;


3.请求只能从客户端开始,服务器只能被动响应;


4.请求 / 响应头部(Header)未经压缩就发送,⾸部信息越多延迟越⼤。只能压缩 Body 的部分;


5.每次互相发送相同的⾸部造成的额外的通信开销。


http/2


HTTP/2 协议是基于 HTTPS 的,所以 HTTP/2 的安全性也是有保障的。(防止篇幅过长,https 我想单独那一篇文章来讲清楚), http2 做了以下改变:


1.头部压缩


HTTP/2中如果你发送多个请求,并且请求头是相同的或者相似的,那么会压缩头部的请求头,协议帮你消除重复的部分。使用的是HPACK算法, 简单的理解HPACK算法就是可以说是用了两张表个来存储当前的请求头中的属性。 一个静态表格,一个动态表格来配合使用。在客户端和服务器同时维护⼀张头信息表,所有字段都会存⼊这个表,⽣成⼀个索引号,以后就不发送同样字段了,只发送索引号,这样就提⾼速度了。


2.⼆进制格式


在http1.1 中我们可以看到我们请求的报文数据,因为编码是utf-8的。但是在http/2中使用的是二进制的编码格式,对我们不友好,但是对计算机是友好的。因为计算机只懂⼆进制,那么收到报⽂后,⽆需再将明⽂的报⽂转成⼆进制,⽽是直接解析⼆进制报⽂,这增加了数据传输的效率。


HTTP/2 不再像 HTTP/1.1 ⾥的纯⽂本形式的报⽂,⽽是全⾯采⽤了⼆进制格式,头信息和数据体都是⼆进制,并 且统称为帧(frame):头信息帧和数据帧。


0d89303bb97c1f7a2526c278a47a4de4.png


3.数据流


HTTP/2 的数据包不是按顺序发送的,同⼀个连接⾥⾯连续的数据包,可能属于不同的回应。因此,必须要对数据包做标记,指出它属于哪个回应。


每个请求或回应的所有数据包,称为⼀个数据流( Stream )。每个数据流都标记着⼀个独⼀⽆⼆的编号,其中规定客户端发出的数据流编号为奇数, 服务器发出的数据流编号为偶数


客户端还可以指定数据流的优先级。优先级⾼的请求,服务器就先响应该请求。


4.Serve Push (服务端推送)


上面说到http1.1 使用的是 「请求 - 应答」的方式,这样就会导致服务端一开始不能主动向客户端推送消息,那么在 HTTP/2中是打破改方式,服务器不再是完全被动地响应请求,也可以新建流 主动向客户端发送消息。比如,在浏览器刚请求HTML的时候就提前把可能会用到的JS、CSS文件发给客户端,减少等待的延迟,这被称为"服务器推送"( Server Push,也叫 Cache push)。


3b2a7796b0fb926e549eca28b5e08960.png



服务端可以主动推送,客户端也有权利选择是否接收。如果服务端推送的资源已经被浏览器缓存过,浏览器可以通过发送RST_STREAM帧来拒收。主动推送也遵守同源策略,换句话说,服务器不能随便将第三方资源推送给客户端,而必须是经过双方确认才行


5.多路复⽤


HTTP/2 是可以在⼀个连接中并发多个请求或回应,⽽不⽤按照顺序⼀⼀对应来返回。


来张图感受一下多路复用的快感


6deb53e9b174204ddbd82324a6a491ba.gif


多路复用很好的解决了浏览器限制同一个域名下的请求数量的问题,同时也接更容易实现全速传输,毕竟新开一个 TCP 连接都需要慢慢提升传输速度。移除了 HTTP/1.1 中的串⾏请求,不需要排队等待,也就不会再出现「队头阻塞」问题,降低了延迟,⼤幅度提⾼了连接的利⽤率。


http/2 的缺陷


看似非常完成的协议,但是也会有一些问题。不然怎么会有 http/3呢?


HTTP/2 主要的问题在于,多个 HTTP 请求在复⽤⼀个 TCP 连接,下层的 TCP 协议是不知道有多少个 HTTP 请求的。所以⼀旦发⽣了丢包现象,就会触发 TCP 的重新传机制,这样在⼀个 TCP 连接中的所有的 HTTP 请求都必须等待这个丢了的包被重传回来。


http/3


基于http/2在tcp中丢包触发TCP重传机制,并且TCP下层协议无法知道有多少个HTTP协议,在HTTP/3 把 HTTP 下层的 TCP 协议改成了 UDP!


网上有好多图来对比一下吧!


2c8b8ebf9e3fff5b86dc0d577ce5a656.png


⼤家都知道 UDP 是不可靠传输的,但基于 UDP 的 QUIC(Quick UDP Internet Connections) 协议 可以实现类似 TCP 的可靠性传输。


HTTP3如何工作


87aa1359af4f612d9924831caa50587b.png


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


参考:


  • www.sohu.com/a/347106117…
  • 小林图解网络(这里不是宣传哈,确确实实学到了东西,从公众号搜索就行)
  • blog.csdn.net/qq_38937634…
  • blog.itpub.net/31483669/vi…
  • blog.csdn.net/u011955252/…
相关文章
|
缓存 网络协议
01JavaWeb基础 - HTTP介绍
01JavaWeb基础 - HTTP介绍
45 0
|
20天前
|
缓存 安全 网络协议
HTTP中如何正确使用Via
【10月更文挑战第20天】Via`首部字段记录报文途中每个代理或网关信息,助于诊断问题和避免循环。
|
6月前
|
网络协议 Linux Shell
http“超级应用与理解”
http“超级应用与理解”
|
Web App开发 存储 网络协议
Http中你必须知道那点事
HyperText Transfer Protocol,超文本传输协议,规定了浏览器和服务器之间数据传输的规则。 数据传输的规则指的是请求数据和响应数据需要按照指定的格式进行传输。 如果想知道具体的格式,可以打开浏览器,点击F12打开开发者工具,点击Network来查看某一次请求的请求数据和响应数据具体的格式内容,如下图所示:
96 0
Http中你必须知道那点事
|
网络协议 前端开发 JavaScript
什么是http?
“超文本”这个词经常会引起误解,让人以为HTTP只能传输文本文件,个人觉得可能改名叫“超媒体传输协议”更加恰当。 本文对“协议”的解释比较通俗,严格来说协议应该包括语法、语义、同步规则和错误处理 我们通常使用浏览器访问的实际上是万维网(WWW),他是互联网(Internet)的一部分,但现在几乎很少有人能区分两者。
169 0
什么是http?
|
Web App开发 缓存 算法
初识HTTP
初识HTTP
170 1
|
缓存 网络协议 算法
二、HTTP篇
二、HTTP篇
161 0
二、HTTP篇
|
网络协议 网络架构
浅读 HTTP
浅读 HTTP
193 0
浅读 HTTP
|
Web App开发 XML 缓存
HTTP服务介绍
HTTP(Hyper Text Transfer Protocol)即超文本传输协议,采用请求/响应模型,是目前互联网使用最为广泛的一种网络协议。主要的过程:客户端向服务器发送一个请求,请求的请求头包含请求的方法、URI、协议版本、请求修饰符、客户信息、以及请求的内容等信息;服务器以一个状态行作为响应,包括消息协议的版本、成功或者错误编码、服务器信息、实体元信息以及实体内容。http 服务默认端口是 80,https 默认端口是 443。下图为 HTTP 服务简单的处理图。
359 0
HTTP服务介绍
|
Web App开发 缓存 网络协议
HTTP就是这么简单
为什么要学HTTP? 我们绝大多数的Web应用都是基于HTTP来进行开发的。我们对Web的操作都是通过HTTP协议来进行传输数据的。 简单来说,HTTP协议就是客户端和服务器交互的一种通迅的格式。 HTTP的诞生主要是为了能够让文档之间相互关联,形成超文本可以互相传阅 可以说,Http就是Web通信的基础,这是我们必学的。
1076 0