捋一下 HTTP 发展史

大家好我是阳阳羊,HTTP 往往是大厂前端面试的常客,所以这些年来 HTTP 到底经历了啥,它的发展史到底是什么样的,这篇文章,咱来好好总结一下!本文旨在记录学习,如果对你有帮助那再好不过啦~

什么是HTTP

HTTP(HyperText Transfer Protocol)超文本传输协议。通俗来讲就是 一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范

HTTP/0.9

HTTP 的早期版本是 HTTP/0.9。那时的 HTTP 并没有作为正式的标准被建立,因此被称为 HTTP/0.9,意思是 HTTP1.0 之前版本。客户端只能发送GET请求,只包含请求行,如GET /index.html,用来获取index.html页面。服务器接收请求信息之后,读取对应的HTML文件,并将数据以ASCII字符流返回给客戶端。

特点

  1. 只有请求行,没有HTTP请求头和请求体
  2. 没有响应头
  3. 传输的内容是以ASCII的字符流

HTTP/1.0

网景这家公司推出了一款新的浏览器,这款浏览器中展示的不单是HTML文件了,还包括了图片、音频、视频等不同类型的文件;并且服务端返回的数据也不仅限于ASCII字符流。为了满足各种双方的各种需求,HTTP/1.0 就此诞生。

1.请求头和响应头

要支持多种类型的文件,我们就需要知道客户端期待服务器返回什么类型的文件、采取什么形式的压缩、提供什么语言的文件以及文件的具体编码等等信息。

HTTP/1.0 提出的方案是通过请求头和响应头来进行协商。

请求头:

accept:text/html
accept-encoding:gzip, deflate, br
accept-language:zh-CN

响应头:

Content-Encoding:br
Content-Type:text/html;charset=UTF-8

服务器接收到请求头,根据内容来准备响应数据。但有时服务器不支持某些格式,那么它会在响应头中设置字段告诉浏览器最终格式,浏览器再根据响应头处理数据。

特点

  1. 引入了请求头和响应头
  2. 支持 POST 请求

HTTP/1.1

技术不断发展,HTTP/1.0 又满足不了需求了,主要体现在以下方面:

1. 持久连接

HTTP/1.0 每进行一次HTTP通信,都需要经历建立TCP连接、传输HTTP数据和断开TCP连接三个阶段,增大开销。

HTTP/1.1 实现了建立一个TCP连接,可以传输多个HTTP请求,减少了大量TCP连接和断开带来的开销。

可以通过请求头中的 Connection: keep-alive || close 字段选择是否启用采用持久连接,默认开启。

2. 队头阻塞

持久连接虽然能减少TCP的建立和断开次数,但是它需要等待前面的请求返回之后,才能进行下一次请求。如果TCP通道中的某个请求因为某些原因没有及时返回,那么就会阻塞后面的所有请求,这就是著名的队头阻塞的问题。

HTTP/1.1中试图通过管线化的技术来解决队头阻塞的问题。将多个HTTP请求整批提交给服务器,不过服务器依然需要根据请求顺序来回复浏览器的请求。由于各种原因,它们最终都放弃了管线化技术。

3. 虚拟机技术带来 Host字段

随着虚拟主机技术的发展,需要实现一台主机上绑定多个虚拟主机,每个虚拟主机都有自己的单独的域名,这些单独的域名都共用同一个IP。因此,HTTP/1.1的请求头中增加了Host字段,用来表示当前的域名地址,这样服务器就可以根据不同的Host值做不同的处理。

4. 处理动态生成内容

在设计HTTP/1.0 时,需要在响应头中设置完整的数据大小,如Content-Length: 1024,这样浏览器就可以根据设置的数据大小来接收数据。不过随着服务器端的技术发展,很多⻚面的内容都是动态生成的,因此浏览器不知道文件大小以及什么时候会接收完所有的文件数据。

HTTP/1.1 通过引入 Chunk transfer 机制来解决这个问题,服务器会将数据分割成若干个任意大小的数据 块,每个数据块标记好长度,最后发送一个长度为0的数据块来标志发送完毕。

5. 客户端 Cookie

详见 面试官:Cookie、Session、Token 有什么区别? – 掘金 (juejin.cn)

特点

  1. 持久连接
  2. 不成熟的管线化技术(最终放弃)
  3. 求头 Host 字段
  4. Chunk transfer 机制
  5. 引入了Cookie

HTTP/2.0

由于 HTTP 协议的可扩展性使得创建新的头部和方法是很容易的。HTTP/1.1 协议已经稳定使用超过 15 年了。HTTP/1.1采取了很多优化资源加载速度的策略,取得了一定的效果。

但是HTTP/1.1对带宽的利用率并不理想。

HTTP/1.1 的缺陷

  1. TCP的慢启动,拥塞控制导致一定会慢启动,慢启动导致页面关键资源加载时间推后
  2. 同时开启了多条TCP连接,那么这些连接会竞争固定的带宽,每条TCP链接中能被分配的带宽大降低
  3. HTTP/1.1队头阻塞的问题,前一个请求延迟,后一个请求便无法发送,地址带宽浪费

1.多路复用

HTTP/2.0 的思路就是一个域名只使用一个TCP⻓连接来传输数据,这样整个页面资源加载只需要一次慢启动,同时避免了多个TCP连接竞争带宽的问题。另外 HTTP/2.0 实现资源的并行请求,也就是任何时候都可以将请求发送给服务器,而并不需要等待其他请求的完成,然后服务器也可以随时返回处理好的请求资源给浏览器。

具体实现是 HTTP/2.0 通过引入了二进制分帧层,将每一个请求分成一帧一帧的数据进行传输并打上编号,同时发送给服务端,且可以在重要的资源请求中编辑为加急,服务端接收到带有各种标号的数据帧后,可以区分哪个数据帧加急,优先整理和响应该请求的数据帧。

捋一下 HTTP 发展史

2.压缩头部

因为头部在一系列请求中常常是相似的,其移除了重复和传输重复数据的成本。

3.服务器推送机制

HTTP/2还可以直接将数据提前推送到浏览器,想象一个场景,浏览器请求HTML时,服务端会自动将关联的CSS、JS文件一同推送给浏览器,加速页面渲染。

特点

  1. 多路复用
  2. 压缩头部
  3. 服务器推送机制
  4. 当前主流版本

HTTP/3.0

凡事都没有最完美的,HTTP/2.0 也不例外,它的缺陷主要表现在 TCP 中

TCP 的缺陷

  1. TCP的队头阻塞,虽然HTTP/2.0解决了应用层面的队头阻塞,但是TCP也存在队头阻塞,当单个数据包丢失时,TCP会暂停后续包的传输,先重传丢失的包数据
  2. TCP慢启动,虽然HTTP/2.0 TCP⻓连接只要一次慢启动,但是慢终究还是慢
  3. TCP协议僵化,TCP常用于物理层,一旦TCP修改,路由器,交换机,防火墙…全部要更新

面对TCP的出现的性能问题,以及协议僵化,我们不能继续在TCP上做文章了,得想个绕过TCP,发明一个TCP和UDP之外的新的传输协议。

QUIC协议

QUIC协议(Quick UDP Internet Connections,快速UDP互联网连接),该协议是基于UDP协议的,在UDP上实现了类似于TCP的多路数据流,可靠性传输等功能

捋一下 HTTP 发展史

特点

  1. 实现了类似于TCP的流量控制和可靠性传输
  2. 集成了TLS加密
  3. 实现了HTTP2中的多路复用
  4. 快速握手
  5. 未来面临挑战

HTTP/HTTPS

HTTPS(超文本传输安全协议)是 HTTP 协议的加密版本。它使用 SSL 或 TLS 协议来加密客户端和服务器之间所有的通信。安全连接允许客户端与服务器安全地交换敏感数据,例如网上银行或者在线商城等涉及金钱的操作。

SSL

安全套接层(Secure Sockets Layer)是旧的标准安全技术,用于在服务器和客户端之间创建加密的网络链路,确保传递的所有数据都是私密且安全的。SSL 现在已被 TLS 协议取代。

TLS

传输层安全性协议(Transport Layer Security)是一个被应用程序用来在网络中安全通信的通讯协议,防止电子邮件、网页、消息以及其他协议被篡改或是窃听。

所有现代浏览器都支持 TLS 协议,它们都要求服务器提供一个有效的数字证书来确认身份以建立安全连接。如果客户端和服务器都能提供自己的数字证书,则它们可以互相认证。

对称加密

双方都知道如何加密和解密,通过网络传输该密钥,但是一旦被截获,之后的内容加密也无意义

非对称加密

服务端生成公钥和私钥,将公钥公布,客户端接收到公钥后生成一个密钥,再利用公钥加密给密钥传输给服务端,服务端解密得到密钥,然后双方使用密钥进行对称加密通信

捋一下 HTTP 发展史

HTTP 与 HTTPS 区别

  • 加密: HTTPS 是 HTTP 协议的更加安全的版本,通过使用SSL/TLS进行加密传输的数据;
  • 连接方式: HTTP(三次握手)和 HTTPS (三次握手+数字证书)连接方式不一样;
  • 端口: HTTP 默认的端口是 80和 HTTPS 默认端口是 443

总结

  • HTTP/0.9:只支持简单的 GET 请求,返回 ASCII 编码的 HTML 文档。
  • HTTP/1.0:引入了请求头和响应头,支持 GET 和 POST 方法,可以传输非纯文本数据。
  • HTTP/1.1:持久连接、请求头 Host 字段、Chunk transfer 机制、引入了Cookie、以及新的方法 PUT 等。
  • HTTP/2.0:通过二进制协议传输数据,多路复用、压缩头部、服务器推送机制,是当前网络通信的主流版本。
  • HTTP/3.0:引入了 QUIC 协议作为基础,以替代 TCP,以及使用 UDP 进行传输,从而减少连接建立的延迟,并提供更好的流控制和错误恢复机制,目前暂未普及。
  • HTTP/HTTPS:HTTPS 是在 HTTP 上添加了安全性的协议,通过 SSL/TLS 加密传输数据,确保通信的机密性和完整性。

参考

HTTP 的发展 – HTTP | MDN (mozilla.org)

图解HTTP_(上野宣)_(Z-Library)

超文本传输协议 – 维基百科,自由的百科全书 (wikipedia.org)

http发展史(http0.9、http1.0、http1.1、http2、http3)梳理笔记 – 掘金 (juejin.cn)

HTTPS详解二:SSL / TLS 工作原理和详细握手过程 – 掘金 (juejin.cn)

最后

水平有限,欢迎指错,春招加油!码字不易,三连鼓励~

已将学习代码上传至 github,欢迎大家学习指正!

技术小白记录学习过程,有错误或不解的地方还请评论区留言,如果这篇文章对你有所帮助请 “点赞 收藏+关注” ,感谢支持!!

原文链接:https://juejin.cn/post/7351700046486863881 作者:阳阳羊

(0)
上一篇 2024年3月30日 下午4:39
下一篇 2024年3月30日 下午4:44

相关推荐

发表回复

登录后才能评论