首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

前言:

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

HTTP 0.9

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

只支持请求

单次链接只接受一次请求,请求完毕后链接会关闭。

请求示例:

响应示例

HTTP 1.0

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

增加了、等方法。

HEAD:请求资源头部信息,可以用来预检测信息,节约服务器资源,比如判断资源大小、或者判断资源是否存在

增加相应状态码(HTTP Status Code)

1xx 信息,服务器收到请求,需要请求者继续执行操作(这个状态码是HTTP1.1新增的,为了方便查看,所以写在了这里)

2xx 成功,操作被成功接收并处理

3xx 资源重定向

4xx 客户端错误

5xx 服务端错误

多字符集支持

多部分发送()

权限()

缓存()

内容编码()

可传输图片、js、css等文件

缺点:

连接无法复用,每次请求完成后连接会关闭,每次请求都需要重新建立连接

消息请求时没有传递,导致请求的资源必须存储在当前服务器。

数据未加密

注意:

队头阻塞

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

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

支持头,允许不同域名配置在同一地址的服务器上。

连接可复用,同一TCP连接可以发送多个请求,当前请求被服务器处理完毕才会处理下一请求,如果当前请求回应特别慢,这时候就会发生队头堵塞。

每个域名浏览器规定最多同时开6个。

持久连接(),默认开启,如果客户端或浏览器没有断开操作,那么连接会一直保持。

新增PUT、 DELETE等方法。(风格接口)

注意:队头阻塞:

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

管道化

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

HTTP 2.0

1. 头部压缩

为什么要进行头部压缩

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

头部压缩详解

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

2. 二进制分帧

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

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

2. 多路复用

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

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

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

3. 请求优先级

图片优先级

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

4. 服务器推送

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

总结:

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

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20210117A0ANTT00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券