标签:get span 连接 治疗 理想 传输数据 解决办法 pad lis
HTTP是什么?
HTTP是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范。
HTTP通常跑在TCP/IP协议栈之上,依靠IP协议实现寻址和路由、TCP协议实现可靠数据传输、DNS协议实现域名查找、SSL/TLS协议实现安全通信。当然,WebSocket、HTTPDNS依赖于HTTP。
HTTP/0.9
GET/index.html
HTTP/0.9当时是为了学术交流,基于请求和响应的模式,在网络中传输HTML超文本的内容。
如上所示,只有一个请求行,没有HTTP请求头和请求体。同样,服务器也没有响应头信息,只是返回了数据。
因为都是HTML格式的文件,决定了返回的文件内容通过ASCII字符流进行传输。
HTTP/1.0
1994年低开启拨号上网,网景也在同年推出了第一款浏览器,人们对万维网的需求不再仅局限于学术交流。
W3C和HTTP工作组HTTP-WG也在这个时代创建。为了满足人们对浏览器的需求(不光是HTML,还有CSS、JS、图片、音视频等),文件格式不再局限于ASCII编码。
HTTP/1.0的解决办法是引入了请求头和响应头。
accept: text/html accept-encoding: gzip, deflate, br accept-Charset: ISO-8859-1,utf-8 accept-language: zh-CN,zh
同时也引入了状态码,为了减轻服务器的压力,提供了Cache机制。服务器需要统计客户端的基础信息(Windows 和 macOS),加入了用户代理字段。
HTTP/1.1
改进持久连接
一个TCP连接上可以传输多个HTTP请求,只要浏览器或者服务器没有断开连接,该TCP会一直保持。
持久连接是默认开启的,如果想要关闭,在请求头中加上Connection:close即可关闭。
目前浏览器中对于同一个域名,默认允许同时建立6个TCP持久连接。
不成熟的HTTP管线化
HTTP/1.1 中试图通过管线化的技术来解决队头阻塞的问题。但是因为各种原因,被各大厂商放弃治疗了。
增加对虚拟主机的支持
HTTP/1.0中每个域名都只绑定唯一的IP地址,因此一个服务器只能支持一个域名。
但是随着虚拟主机技术的发展,一台物理主机上绑定多个虚拟主机的需求大大提升,每个虚拟主机都有自己单独的域名,这些单独的域名都公用同一个IP地址。
因此,请求头中也增加了Host字段,表示当前的域名地址,服务器可根据不同的Host值做不同的处理。
增加对动态生产内容的支持
HTTP/1.0需要在响应头中设置完整的数据大小Content-Length:900,这样,浏览器就可以根据设置的数据大小来接收数据。
由于服务器端技术发展,页面都是动态生成的,传输数据之前并不知道最终数据大小,导致浏览器不知道何时会接受完所有的文件数据。
HTTP/1.1通过引入Chunk transfer机制来解决问题,服务器将数据分割成若干个任意大小的数据块,每个数据块发送时会附上上一个数据块的长度,最后使用一个长度为0的块作为发送数据完成的标志。
客户端Cookie、安全机制
HTTP1.1引入了客户端Cookie机制和安全机制。
HTTP/2.0
HTTP/1.1的缺陷
对带宽的利用率不理想,三个问题导致:
TCP 的慢启动
同时开启了多条 TCP 连接,那么这些连接会竞争固定的带宽
HTTP/1.1 队头阻塞的问题
HTTP/2多路复用
HTTP/2使用多路复用机制解决了上述问题。
一个域名只使用一个 TCP 长连接和消除队头阻塞问题。通过引入二进制分帧层,实现了 HTTP 的多路复用技术。
HTTP/2服务器推送
服务器可以提前将数据推送到浏览器,浏览器有权选择是否接受。浏览器发送RST_STREAM帧可以选择拒收。
HTTP/2头部压缩
头部的压缩大大的提升了传输效率。HTTP/2开发了“HPACK”算法,在客户端和服务器建立“字典”,用索引号表示重复的字符串,还采用哈夫曼编码来压缩整数和字符串。
HTTP/2可以设置请求的优先级
可以设置让某些重要的数据优先被服务器处理并返回。
HTTP/3.0
HTTP/2的缺陷
TCP的队头阻塞
在 TCP 传输过程中,由于单个数据包的丢失而造成的阻塞称为 TCP 上的队头阻塞。
HTTP/2只解决了应用层面的队头阻塞,队头阻塞的问题还存在于TCP协议本身。
TCP建立连接的延时
TCP以及TCP+TLS建立连接的所产生的延时也是影响传输效率的一个主要因素。
TCP协议僵化
中间件僵化
我们把在互联网的各处搭建的设备叫做中间设备(中间件),比如路由器、NAT、防火墙、交换机等,它们通常依赖一些很少升级的软件,这些软件使用了大量的 TCP 特性,设置之后便很少进行更新。这就对我们我们更新TCP的时候造成了很大的困难,新协议的数据包经过这些中间件时,它们不会去理解包的内容从而丢弃掉这些数据包。
操作系统
因为 TCP 协议都是通过操作系统内核来实现的,应用程序只能使用不能修改。通常操作系统的更新都滞后于软件的更新,所以想要更新操作系统内核中的TCP协议也是非常困难的。
QUIC协议
HTTP/3 选择了一个折衷的方法——UDP 协议,基于 UDP 实现了类似于 TCP 的多路数据流、传输可靠性等功能,我们把这套功能称为QUIC 协议。
实现了类似 TCP 的流量控制、传输可靠性的功能
集成了 TLS 加密功能
实现了 HTTP/2 中的多路复用功能
实现了快速握手功能
HTTP/0.9、HTTP/1.0、HTTP/1.1、HTTP/2、HTTP/3各版本之间的区别?
标签:get span 连接 治疗 理想 传输数据 解决办法 pad lis
原文地址:https://www.cnblogs.com/Yangyecool/p/13379695.html