一、题目
HTTP3 的建立过程
二、HTTP0.9
只支持GET请求,只能传输超文本
三、HTTP1.0
- 除了 GET 命令,新增了 POST 和 HEAD 命令
- 不再只接收 HTML 格式数据,可以设置 contentType 传输多种数据格式
问题:由于 HTTP 1.0 版本连接过程为没建立一次连接只能发送一个请求,一个请求处理完成就关闭连接,如果有新的请求则需要重新建立连接,因此增加了连接时的资源损耗,且影响了性能
例如,一个包含有许多图像的网页文件中并没有包含真正的图像数据内容,而只是指明了这些图像的 URL 地址,当 WEB 浏览器访问这个网页文件时,浏览器首先要发出针对该网页文件的请求,当浏览器解析 WEB 服务器返回的该网页文档中的 HTML 内容时,发现其中的图像标签后,浏览器将根据标签中的 src 属性所指定的 URL 地址再次向服务器发出下载图像数据的请求。显 然,访问一个包含有许多图像的网页文件的整个过程包含了多次请求和响应,每次请求和响应都需要建立一个单独的连接,每次连接只是传输一个文档和图像,上一次和下一次请求完全分离。即使图像文件都很小,但是客户端和服务器端每次建立和关闭连接却是一个相对比较费时的过程,并且会严重影响客户机和服务器的性能
四、HTTP1.1
- 引入了持久连接,每次建立连接不直接关闭,而是等待请求次数或者连接时间过期才会断开连接,即针对同一个连接默认不关闭,可以同时处理多个请求,从而提升了 HTTP 协议的效率
- 新增了一批 Request method:增加了 OPTIONS,PUT,DELETE,TRACE,CONNECT 方法
- 请求头引入了 range 头域,支持断点续传
- 引入了更多的缓存控制策略。如 Etag、If-Unmodified-Since、If-Match、If-None-Match 等更多的可控选择的缓存头来控制缓存策略
五、HTTP2.0
- 使用多路复用技术,即通过一个 TCP 连接,并行的发送多个请求和响应
- 采用首部压缩技术,让报头先压缩后发送,能快速传输
- 服务端推送:例如网页有一个 sytle.css 的请求,在客户端收到 sytle.css 数据的同时,服务端会将 sytle.js 的文件推送给客户端,当客户端再次尝试获取 sytle.js 时就可以直接从缓存中获取到,不用再发请求了
六、HTTP3.0
6.1、解决了队头阻塞问题
通俗来说就是:一个数据包影响了一堆数据包,它不来大家都走不了。队头阻塞问题可能存在于 HTTP 层和 TCP 层,在 HTTP1.x 时两个层次都存在该问题
HTTP2.0 协议的多路复用机制解决了 HTTP 层的队头阻塞问题,但是在 TCP 层仍然存在队头阻塞问题,TCP 协议在收到数据包之后,这部分数据可能是乱序到达的,但是 TCP 必须将所有数据收集排序整合后给上层使用,如果其中某个包丢失了,就必须等待重传,从而出现某个丢包数据阻塞整个连接的数据使用
QUIC 协议是基于 UDP 协议实现的,在一条链接上可以有多个流,流与流之间是互不影响的,当一个流出现丢包影响范围非常小,从而解决队头阻塞问题
6.2、切换网络连接保持
网络切换几乎无时无刻不在发生。TCP 协议使用五元组来表示一条唯一的连接,当我们从 4G 环境切换到 wifi 环境时,手机的 IP 地址就会发生变化,这时必须创建新的 TCP 连接才能继续传输数据(建立新的连接还是需要几百毫秒的时间)
QUIC 协议基于 UDP 实现摒弃了五元组的概念,使用 64 位的随机数作为连接的 ID,并使用该 ID 表示连接;基于 QUIC 协议之下,我们在日常 wifi 和 4G 切换时,或者不同基站之间切换都不会重连,从而提高业务层的体验
转载请标明出处,原文地址:https://blog.csdn.net/weixin_41835916 如果觉得本文对您有帮助,请点击赞支持一下,您的支持是我写作最大的动力,谢谢。