HTTP协议入门(二)

116 阅读4分钟

在 HTTP 协议当中最为重要的一点,便是理解数据收发的格式问题。

对于浏览器而言,我们所发送给它的数据应当以什么样的形式接收、处理,我们的通信应当以什么样的方式进行,都需要在我们所填写的数据格式中得到答案。

HTTP 协议简史

想要真正理解数据的格式设计,就需要从 HTTP 当中的历史得到答案,因此,我们有必要对 HTTP 协议进行学习。

第一版本:0.9

起源于二十世纪九十年代的HTTP协议,最初的用途,仅仅就是传输一些具有简单格式的文本文件,因此对于我们的初代格式而言,请求包与响应包都非常简单而朴素。

请求包

GET /example.html

请求包的格式遵循着 GET 文件相对路径 的格式,除此之外再无其它。

响应包

content

响应包的全部内容就是请求包所指定的文件内容。

评价:简单,但是难以持续

对于我们的第一版本 HTTP 协议而言,它的简单设计带来了不少缺陷:

  • 缺乏合理的错误处理模式
    如果我们请求的文件并不存在,第一版本 HTTP 的做法就是发送一个默认的响应文件(也是今天我们熟知的 404 页面的雏形),而不会有第二种处理方式。
    这对于成熟的应用而言,并不是一种良好的处理模式。
  • 对于非文本格式文件,缺乏合理的拓展性支持
    受限于当时的网络带宽,HTTP 协议并没有纳入对图像传输等非文本格式文件的支持。
  • 对于安全性缺乏支持
    由于起初的互联网仅仅是一个学术性网络,因此网络之中恶意攻击的行为相对较少,而在互联网逐渐拓展到世界各地之后,网络的安全性急剧下降。
    而 http 在设计之时,没有考虑到这一方面因素,故安全性相对较低。

因此,在经历短暂的应用之后,新一版本的 http 协议呼之欲出,进而形成了第一个标准化版本 HTTP 1.1 (HTTP 1.0 是一个有着许多改进,但是没能形成标准化文本的版本)

第一个标准化版本:1.1

标准因为解决问题而设置,而 http 的第一个标准化版本,就将协议的拓展性与灵活性作为解决的重点,因此,在第一标准化版本 1.1 中,http 协议将原先的单行指令改组为“元信息与数据"的模式。

在这里插入图片描述

反映到请求包与响应包上,便是反馈由原先的单行变成了多行。

在这里,我们将真实的数据进行简化并二次分析。

请求包

GET / HTTP/1.1
Host: neihewozai.cn
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/109.0
Accept: text/html,image/webp,
Connection: keep-alive

请求包在原有格式的基础上进行了拓展,现在我们的第一行变成了

指令 文件相对路径 http 版本号

而之后则填补了许多其它的元信息,他们也如之前一般,一行行地加以呈现。

Host: 域名 这让我们的通信可以非常顺畅的连接到域名之下的一台主机(域名往往对应着多个IP,这可以让我们的网络处理由单台主机映射到多台主机,这可以有效的降低处理负载)

User-Agent: 客户端信息 可以让我们透露出自己的操作系统,浏览器等,帮助服务器解决问题

Accept: 文件类型 这就引入了多类型文件的支持,在这里,我们可以看到客户端所可以接收的内容包含 htmlwebp (一种图像)两种类型

Connection: keep-alive 让我们的连接可以一直保持,从而降低重复连接带来的时间损耗

响应包

HTTP/1.1 304 Not Modified
Date: Mon, 13 Feb 2023 10:54:58 GMT
Connection: keep-alive
Server: wts/1.6

<!DOCTYPE HTML>
...

响应包也在原有的基础上进行了拓展

第一行变成了

http 版本号 状态码 说明信息

而第二行说明了时间,第三行承认了连接持续状态

第四行则说明了所使用的服务器软件。

在空行之后,开始传输具体的数据。

走向未来:HTTP/2 & HTTP/3

作为已经广泛部署的新版本 http 协议,它们具有更多的明显优势。

与 1.1 的最大区别,在于 http 2.0 与 http 3.0 都是采用 二进制 形式传输的,这就使得它不再可读。

限制于篇幅,我们在这里并不展开。

小结

对于我们而言,http 协议版本较多,且因为各个版本都有着新的元信息,新的传输形式,因此全面的学习他们,对于入门期间的我们并不现实。

最好的办法,就是专注于其中的一种版本,进行较为深入的研究。

MDN参考文档 上面提供了非常详细的说明,我们可以参考他们进行研究。