http|HTTP 协议详解和版本介绍(HTTP发展历史)

HTTP 协议的发展历史以及相应版本的相关功能的简单介绍 本文主要讲解 http协议 的发展历史: 1. http协议发展历史总览 。 2. http协议分析: HTTP版本各自的基本功能 。 3. http协议命令: HTTP版本各自新增的请求命令 。
废话不多说, 直接上代码以及图例(为了让大家方便阅读, 都有自己验证过程的一些图片作为分享) 。

HTTP 协议的发展历史

1. 第一个定稿的 http 协议是 HTTP/0.9 版本 。 1. HTTP 在 1990 年问世 。 2. 其实此时的 HTTP 并没有作为正式的标准被建立 。 3. HTTP/0.9 其实是 HTTP/1.0 版本之前的意思 。2. HTTP/1.0 版本 。 1. HTTP 正式作为标准被公布是在 1996年的 5 月份 。 2. 这一年 HTTP 被正式命名为 HTTP/1.0 版 。 3. 该版本的协议标准现在仍然被广泛使用在服务器端 。4. HTTP/1.1 版本 。5. HTTP/2 版本 。


一: HTTP/0.9 版本
1. 只有一个命令(方法) GET 。2. 没有 header 等描述数据的信息 。3. 服务器发送完毕, 就关闭 TCP 链接 。 1. 注意: 我们这边提到的 TCP 链接和 http 的请求是不一样的(也就是说http请求连接和tcp连接不是同一个概念) 。 2. 同一个 TCP 链接里面我们可以发送多个 http 请求, 以前的协议版本是不能这样做的, 但是在 HTTP/1.1 之后就可以这样做了 。 3. 一个 TCP 链接对应多个 http 请求; 一个 http 请求肯定是在某个 TCP 链接里面去定义发送的 。

图片示例: http|HTTP 协议详解和版本介绍(HTTP发展历史)
文章图片


二: HTTP/1.0 版本:
1. 'HTTP/1.0 版本', 其实和我们现在使用的 HTTP/1.1 版本差不了多少 。2. 在这个版本里面它增加了很多命令 。 例如: post / put / head 。3. 增加了 'status code' 和 'header' 相关内容 。 1. status code 描述服务端处理请求之后的状态 。 2. header: 对应的内容就是请求的相关数据的描述以及我们如何对数据进行操作的方法 。4. 多字符集的支持, 多部分发送, 权限, 缓存等(这些设置更有利于我们使用http 请求实现 web 服务) 。

图片示例: http|HTTP 协议详解和版本介绍(HTTP发展历史)
文章图片


三: HTTP/1.1 版本:
1. 'HTTP/1.1 版本', 在 HTTP/1.0 版本的基础上增加了一些功能, 来优化网络链接的一个过程 。2. 支持 '持久链接': 1. 在 HTTP/1.0 版本, 一个 'http' 请求就要在客户端和服务端之间建立一个 'TCP' 链接, 在服务端返回完内容之后, 'TCP' 链接就关闭掉了(考虑 tcp 创建链接的成本与延迟) 。3. pipeline(管道): 1. 我们可以在同一个 'TCP' 链接里面, 发送多个请求; 但是在服务端对于进来的请求我们需要按照顺序进行一个内容的返回 。 2. 所以如果我们前一个请求它的等待时间非常的长, 而后一个请求处理的非常的快, 那么这个时候后一个请求它不能先发送, 它要等第一个请求数据发送完成之后, 它才能进行发送 。 3. 这一部分时间就相当于串行与并行的关系, 这个时候性能的差异就体现出来了 。 4. 而这个在 HTTP2 里面会有一个优化 。4. 增加 'host' 和其它一些命令 。 1. host: 有了 'host' 之后, 我们就可以在同一台(物理)服务器, 可以同时跑多个不同的 'web' 服务(例如一个nodeJS的服务, 一个Java的服务) 。 2. 通过 'host' 字段来表示我们都是请求到这台物理服务器上面, 但是我们要请求的是哪一个软件服务, 是通过 'host' 来判断的 。 3. 'host' 的好处就是, 在同一个物理服务器或者同一个集群里面可以同时部署很多个不同的 'web' 服务 。 4. 提高物理服务的使用效率 。

图片示例: http|HTTP 协议详解和版本介绍(HTTP发展历史)
文章图片


四: HTTP/2 版本
1. 在 http2 中, 所有数据以'二进制'传输 。 1. 在 HTTP1.1 里面我们大部分的数据传输是通过'字符串'的, 所以它的一个'数据分片'方式是不太一样的 。 2. 在 HTTP2 里面我们所有的数据都是以帧进行传输的 。2. 鉴于上面所说的 http2 的优点, 同一个 TCP 链接里面发送多个请求, 不再需要按照顺序来返回数据了 。 1. 可以同时并行返回 第一个与第二个请求的返回的数据 。 2. 这样就是一个并行的关系, 能够更大限度的去让整个 Web 应用的'传输效率'有个质的提升 。3. '头信息压缩'以及'推送' 等提高效率的功能(http2整体上是为了解决 http1.1 中的性能低下的问题) 。 1. 头信息压缩: 1. 在 HTTP1.1 里面每一次发送请求和返回请求, 它的很多 http头 都是要进行一个完整的发送与返回的 。 2. 但其实这一部分头信息, 里面很多的内容比如: header 字段, Content-Type , catch 它们是以字符串的形式保存的, 所以它占用的量(带宽) 是比较大的 。 3. 在 HTTP2 里面我们的头信息进行了一个压缩, 这样就会有效的减少带宽的使用 。 2. 推送功能: 1. HTTP 请求是只能 '客户端' 对服务器发起请求, 然后服务器响应请求返回内容; 也就是说 '客户端' 永远是主动方, 服务端永远是被动方 。 2. 在 HTTP2 中有了推送这个概念, 也就是说服务端是可以主动发起数据传输的 。 3. 推送功能解决了一个什么问题: 1. 最简单的例子 - 我们的 html 也就是 web 页面都要求有 css js 文件, 它们都是以链接的方式在我们的 html 文本中显示, 通过浏览器它解析了里面的内容之后, 我们再根据 url 链接去请求里面的 css/js 文件 。 2. 这里面就会包含一个顺序的问题, 我们需要先请求到 html 文本, 然后在浏览器运行解析了这个文本之后我们才能去发送 css/js 的请求 。 3. HTTP2 里面有了推送的功能之后, 我们在请求这个 html 的同时, 服务端可以主动把 html 里面所需要引用到的 css/js 文件推送到我们的客户端 。 4. 使用 推送功能 的话, 我们的 html js css 它们的发送顺序是并行的, 而不是串行的 。

图片示例: http|HTTP 协议详解和版本介绍(HTTP发展历史)
文章图片


【http|HTTP 协议详解和版本介绍(HTTP发展历史)】之前有整理过部分知识点, 现在将整理的相关内容, 验证之后慢慢分享给大家; 这个专题 就是 “HTTP协议原理与实践代码” 的相关专栏; 不积跬步,无以至千里, 戒焦戒躁 。
如果对你有所帮助,喜欢的可以点个关注, 必然回关; 文章还一直持续打磨 。 有什么想要了解的前端知识吗? 可以评论区留言, 会及时跟进分享所提内容 。 整理知识点不易, 每次都是在工作繁忙之余夜深人静之时整理, 无论知识点是大是小, 都会验证后再分享, 以防自己发表的文章给大家造成误导 。如有问题还望不吝赐教,本人会及时更改 (本文原创, 如需转载,请注明出处) 。 HTTP协议原理上篇文章: HTTP协议相关的网络经典五层模型
HTTP协议原理下篇文章: HTTP中的TCP三次握手-详细解析

    推荐阅读