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

资料来源 : 小林coding
小林官方网站 : 小林coding (xiaolincoding.com)

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

对于 HTTP 的请求和响应,通常 HTTP 的响应的数据大小会比较大,也就是服务器返回的资源会比较大

于是,我们可以考虑对响应的资源进行压缩,这样就可以减少响应的数据大小,从而提高网络传输的效率。

压缩的方式一般分为 2种,分别是:

  • 无损压缩
  • 有损压缩

无损压缩

无损压缩是指资源经过压缩后,信息不被破坏,还能完全恢复到压缩前的原样,适合用在文本文件、程序可执行文件、程序源代码。

首先,我们针对代码的语法规则进行压缩,因为通常代码文件都有很多换行符或者空格,这些是为了帮助程序员更好的阅读,但是机器执行时并不要这些符,把这些多余的符号给去除掉。

接下来,就是无损压缩了,需要对原始资源建立统计模型,利用这个统计模型,将常出现的数据用较短的进制比特序列表示,将不常出现的数据用较长的二进制比特序列表示,生成二进制比特序列一般是**「霍夫曼编码」**算法。

gzip 就是比较常见的无损压缩。客户端支持的压缩算法,会在 HTTP 请求中通过头部中的 Accept-Encoding 字段告诉服务器:

Accept-Encoding:gzip,deflate,br

服务器收到后,会从中选择一个服务器支持的或者合适的压缩算法,然后使用此压缩算法对响应资源进行压缩,最后通过响应头部中的 Content-Encoding 字段告诉客户端该资源使用的压缩算法。

Content-Encoding:gzip

gzip 的压缩效率相比 Google 推出的 Broti 算法还是差点意思,也就是上文中的 br,所以如果可以,服务器应该选择压缩效率更高的 br 压缩算法。

有损压缩

与无损压缩相对的就是有损压缩,经过此方法压缩,解压的数据会与原始数据不同但是非常接近

有损压缩主要将次要的数据舍弃,牺牲一些质量来减少数据量、提高压缩比,这种方法经常用于压缩多媒体数据,比如音频、视频、图片。

可以通过 HTTP 请求头部中的 Accept 字段里的「q质量因子」,告诉服务器期望的资源质量。

Accept:audio/*;q0.2,audio/basic

关于图片的压缩,目前压缩比较高的是 Google 推出的 WebP 格式,它与常见的 Png 格式图片的压缩比例对比如下图:

可以发现,相同图片质量下,WebP 格式的图片大小都比 Png 格式的图片小,所以对于大量图片的网站可以考虑使用 WebP 格式的图片,这将大幅度提升网络传输的性能。

关于音视频的压缩,音视频主要是动态的,每个帧都有时序的关系,通常时间连续的帧之间的变化是很小的。

比如,一个在看书的视频,画面通常只有人物的手和书桌上的书是会有变化的,而其他地方通常都是静态的,于是只需要在一个静态的关键帧,使用增量数据来表达后续的帧,这样便减少了很多数据,提高了网络传输的性能。对于视频常见的编码格式有 H264、H265 等,音频常见的编码格式有 AAC、AC3。


这期就到这里,下期见!

相关推荐
振浩微433射频芯片29 分钟前
从门锁到考勤,VRC522B如何在近场读卡场景中“稳坐C位”?
网络·人工智能·单片机·物联网
Logintern098 小时前
网络通讯协议—TCP/IP协议
网络·网络协议·tcp/ip
熊IT10 小时前
什么是原生住宅 IP?如何判断一个 IP 是否真正“原生”?
服务器·网络·tcp/ip
爱学习的小白柏10 小时前
【AI问数技术】多Agent协同架构:查询规划/SQL生成/洞察分析/报告生成
java·网络·人工智能·windows·sql·架构·llama
格尔曼Noah13 小时前
iPhone共享网络给电脑的方式
网络·电脑·iphone
好评12414 小时前
【Linux】Socket编程TCP
linux·网络·tcp/ip
夜来小雨15 小时前
异常Wi-Fi信号问题处理
网络
Lost of 程序猿15 小时前
Kubernetes 排障实战:从 CrashLoopBackOff 到网络不通
网络·容器·kubernetes
三垣网安16 小时前
记一次渗透测试 | 教育src漏洞分享(2)
网络·安全·web安全·网络安全
mengge.cloud16 小时前
Linux三剑客 grep sed awk 小白基础教程
linux·运维·服务器·网络