不够严谨欢迎指出问题,小白一个,不介意就一起努力学习!
我们直接开门见山
http版本
超文本传输协议(Hypertext Transfer Protocol,简称HTTP)是应用层协议(应用和应用之间在网络上信息传输)。
一共四个版本(目前为止)
- HTTP 0.9
- HTTP 1.0
- HTTP 1.1
- HTTP 2.0
其实我们常说的版本差异多是讨论1.0到2.0,虽然0.9是最早发布,但是它只能get请求。
HTTP 1.0
第二代虽然被大量使用(服务端),但是存在巨大的缺陷——————请求缺陷,1.0协议处理请求时是一个请求用一个tcp连接完成。
--1.0缺陷
我们先不说tcp具体做什么。我们去理解这里请求缺陷的描述: tcp可以先理解为两个电脑进行数据的连接(互相确认了通信的状态。),而连接是个动作,必然耗时,所以如果一个tcp连接只能完成一个请求的话,那么网页的短时间内的请求一旦变多,网页与服务器连接的总消耗时间就会大大增加,你此刻明显感受到网页“卡”住了。
1.0的缺陷就是一次请求一次tcp连接,或则说一次tcp连接只能请求一次。(这里tcp完成一次请求后就断开了,也就是不再连接ing)
HTTP 1.1
1.1版本的最明显的优化当然成了解决1.0缺陷的方法。
--持久连接
1.1版本支持持续tcp连接,这意味着请求可以即刻发出,时间成本去除了建立tcp连接这一步(除了开始)。tcp的连接默认是一段时间内没有请求就会自动关闭,不过转念一想这明显不规范,我中华乃礼仪之邦,怎么能让人别人苦等呢?所以自然有了规范的处理方式————“客户端在最后一个请求时,发送 Connection: close,明确要求服务器关闭 TCP 连接”。
HTTP 2.0(当前2021-9)
作为2015年正式发布的http传输协议版本,2.0是最新版本。
我们仍然关注请求上的优化:
你说他还能怎么优化?这不请求马上就可以发送了,没有连接的时间成本了,难道连传输的成本也要减去?
对!2.0做到了传输时间的优化!
--服务器推送
“HTTP 2.0 允许服务器未经请求,主动向客户端发送资源,这叫做服务器推送(server push)。”
这句话解释了谁为传输的优化做出了努力————服务端。这就像老板没让你做明天的工作,但是你闲着没事干,瞒着老板把明天的事也做了,所以老板第二天到公司就可以马上处理你的成果(开玩笑,咱们别这么卷)。这里我们不去考虑服务器是否正确地知道浏览器需要哪些资源,你只需要知道服务器通过浏览器请求的一个html资源就能推测后续要请求的资源。
因为服务器把浏览器(加载单个网页)需要资源一次性或较少次数请求就全部发送过来,所以,浏览器发出http请求并等待响应的时间变成了从本地查看是否有该资源并使用该资源。传输时间自然是大为削减。