高级前端进阶,你知道http有几个版本吗?

前言:

http全称为超文本传输协议,本文将会尽量精简的将http发展中经历的几个版本介绍出来。

HTTP 0.9

非常简单,纯文本格式,没有状态码以及错误代码等。

  1. 只支持get请求
  2. 单次TCP链接只接受一次请求,请求完毕后TCP链接会关闭。

请求示例:

GET https://www.baidu.com

响应示例

<HTML>
简单的html
</HTML>

HTTP 1.0

我们现在使用的HTTP 1.1版本的一个雏形,

  1. 增加了POSTHEAD等方法。
    • HEAD:请求资源头部信息,可以用来预检测信息,节约服务器资源,比如判断资源大小、或者判断资源是否存在
  2. 增加相应状态码(HTTP Status Code)
    • 1xx 信息,服务器收到请求,需要请求者继续执行操作(这个状态码是HTTP1.1新增的,为了方便查看,所以写在了这里)
    • 2xx 成功,操作被成功接收并处理
    • 3xx 资源重定向
    • 4xx 客户端错误
    • 5xx 服务端错误
  3. 多字符集支持
  4. 多部分发送(multi-parttype
  5. 权限(authorization
  6. 缓存(cache
  7. 内容编码(contentencoding
  8. 可传输图片、js、css等文件
缺点:
  1. TCP连接无法复用,每次请求完成后TCP连接会关闭,每次请求都需要重新建立TCP连接
  2. 消息请求时没有传递hostname,导致请求的资源必须存储在当前服务器。
  3. 数据未加密
注意:

队头阻塞

当前请求发送后,服务器处理请求,当请求处理时间过长时,会发生队头阻塞,只有在当前请求响应后才会发出下一次请求。

HTTP 1.1(目前正在使用的版本)

  1. 支持host头,允许不同域名配置在同一IP地址的服务器上。
  2. 连接可复用,同一TCP连接可以发送多个请求,当前请求被服务器处理完毕才会处理下一请求,如果当前请求回应特别慢,这时候就会发生队头堵塞。
    • 每个域名浏览器规定最多同时开6个TCP
  3. 持久连接(connection:keep-alive),默认开启,如果客户端或浏览器没有断开操作,那么TCP连接会一直保持。
  4. 新增PUT、 DELETE等方法。(RESTFUL风格接口)
注意:
队头阻塞:

http1.1允许一个TCP连接发送多个请求,不必等到上一个请求响应,就可以发送下一个请求,但是,服务器响应需要根据请求接收顺序,先接受的请求先响应回去。如果最先发出的请求响应慢的话,就会影响其他请求的响应,这样就造成了对头阻塞。

管道化

赋予了客户端在一个TCP连接中连续发送多个请求的能力,而不需要等到前一个请求响应,这大大提高了效率。

HTTP 2.0

1. 头部压缩

为什么要进行头部压缩

在普通HTTP请求中分为三部分,[请求头、消息主体、状态行],其中消息主体可以通过gzip压缩,而请求头跟状态行没办法进行压缩,随着web功能越来越复杂,一个页面的请求也越来越多,而头信息中有着大量的数据不会频繁变动,但是又要随每次请求发送,导致大量流量浪费,所以HTTP2.0引入了头部压缩技术。

头部压缩详解

在请求中header内会有很多重复的信息发送,HTTP2.0使用 ,服务器客户端各缓存一份header fields表,用来避免重复的信息传输。

2. 二进制分帧

数据采用二进制格式传输,这样解析效率更高效,其中头信息会放入HEADERS帧,信息体会放入DATA帧,这些帧可以乱序发送,服务器接收到后根据每个帧的流标识符重新组装。(HTTP1.x数据传输采用的是文本格式传输)

HTTP2.0把协议通信的基本单位缩小为一个一个的帧,这些帧并行的在同一个TCP请求上交换消息。

2. 多路复用

为什么用多路复用?
浏览器限制同域名下最多建立6个TCP链接,每个链接如果其中一个请求的响应卡主,后面的请求就会一直等待响应,会造成阻塞。

多路复用
所有请求都是通过一个TCP链接并发完成。多路复用对同一域名下的请求都是基于流,

每个请求都可以看做是一个流,每个帧上都有一个流标识,而不同的流在交错发送,当服务器收到消息后会拼接同一个流的帧组成一整块数据。

3. 请求优先级
  • 图片优先级<css<js文件

每个http2.0中的流都有个优先级,高优先级的流会优先发送。

4. 服务器推送

服务器可以对一个客户端请求发送多个响应。当客户端请求某个页面时,服务器可以主动将页面内引入的图片、jscss主动推送至客户端,节约请求时间以及流量。

总结:

http2.0的多路复用以及二进制分帧可以使请求通过帧交错的请求至服务器,而且同一域名只需要建立一个TCP连接,这样一来,我们在http1.x中使用的js合并就没有意义了(js合并是为了减少请求数)。

如果想获取更多内容,可以扫描下方二维码,一起学习,一起进步。
左道前端

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值