计算机网络 | 06.[HTTP篇] HTTP/1.1如何优化

总述

总则来说,优化思路有以下三个:

  1. 尽可能使用缓存;
  2. 减少HTTP请求次数;
  3. 减少HTTP响应的数据大小。

但不管怎么优化 HTTP/1.1 协议都是有限的,不然也不会出现 HTTP/2 和 HTTP/3 协议。

1. 尽可能使用缓存

如何避免发送 HTTP 请求?

对于一些具有重复性的 HTTP 请求,比如每次请求得到的数据都一样的,我们可以把这对「请求-响应」的数据都 缓存在本地,那么下次就直接读取本地的数据,不必在通过网络获取服务器的响应了,这样的话 HTTP/1.1 的性能肯定肉眼可见的提升。

所以,避免发送 HTTP 请求的方法就是通过 缓存技术,HTTP 设计者早在之前就考虑到了这点,因此 HTTP 协议的头部有不少是针对缓存的字段。

缓存策略分为 强缓存策略 和 协商缓存策略,其中「协商缓存」更为常用;

协商缓存可以通过两对 请求头 / 响应头 来协同完成,分别是 If-Modified-Since / Last-Modified 和 If-None-Match / Etag,其中「If-None-Match / Etag」更为常用,其中 Etag 是响应头,其值能唯一标识某个资源。

涉及的状态码有:

  • 200(OK):客户端未使用缓存,而是向服务器请求资源(发起一次请求);
  • 200(from disk cache):客户端使用了本地磁盘的资源,没有发起请求;
  • 304(Not Modified):客户端发起请求询问资源是否可用,服务端告知资源未被修改,依旧可用,此时 响应中无数据

详细可见文章03.[HTTP篇] HTTP缓存技术

HTTP缓存技术.drawio

2. 减少HTTP请求次数

2.1. 减少重定向次数

减少重定向请求次数

重定向请求是指服务器 某个资源的url 发生了变更,若客户端依旧尝试通过 旧的url 访问该资源,那服务器应该通过 「302」状态码和「Location响应头(值为新的url)」响应客户端,让客户端 使用新的url重新发送请求,浏览器会自动完成。

换言之,每个重定向请求,都会使得总请求次数+1,因此要尽可能地减少重定向次数。

如果中间存在代理服务器,那么代理服务器可以进行优化以减少重定向的次数:

  • [最慢的情况]:一次重定向使得客户端和代理服务器 都发送了两次请求

    image-20220803022058840
  • [优化1] 将重定向交由代理服务进行,减少客户端一次请求

    image-20220803021950939
  • [优化2] 若代理服务器知晓重定向规则,当客户端尝试访问url1,代理直接以url2发送请求,再减少一次代理服务器请求

    image-20220803022322616

2.2. 合并资源(合并图片、打包)

合并请求

如果把多个访问小文件的请求合并成一个大的请求,虽然传输的总资源还是一样,但是减少请求,也就意味着 减少了重复发送的 HTTP 头部

另外由于 HTTP/1.1 是请求响应模型,如果第一个发送的请求,未收到对应的响应,那么后续的请求就不会发送,于是为了防止单个请求的阻塞,所以一般浏览器会同时发起 5-6 个请求,每一个请求都是不同的 TCP 连接,那么如果合并了请求,也就会 减少 TCP 连接的数量,因而省去了 TCP 握手和慢启动过程耗费的时间

合并资源,让客户端使用「一个大资源的请求」去替代「多个小资源的请求」,从而减少请求次数。至于资源的切割或解压,这些影响并不大。

但是这么做也存在弊端:当大资源中的某一个小资源发生变化,客户端就需要重新下载完整的大资源文件,这「带来了额外的网络消耗」。

image-20220803023306983

2.3. 资源按需获取

当用户滑动到页面的时候,再加载其附近的数据,实现资源的「按需获取」。

3.减少HTTP响应的数据大小

如何减少 HTTP 响应的数据大小?

对响应的资源进行「压缩」:

  • [无损压缩] 常用于各种文本,常用的压缩方式是gzip(本质上是使用相似的字符进行替换);
  • [有损压缩] 常用于各种多媒体数据,如图片、音频和视频。

参考文章

小林coding - HTTP/1.1如何优化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值