如何减少 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。


这期就到这里,下期见!

相关推荐
星星也在雾里13 分钟前
内网服务对外访问:frp 内网穿透完整教程
网络
liulian091617 分钟前
Flutter 网络状态与内容分享库:connectivity_plus 与 share_plus 的 OpenHarmony 适配指南
网络·flutter
雨的旋律209927 分钟前
linux网卡绑定bond设置一步不少
linux·运维·网络
Summer不秃1 小时前
深入理解 Token 无感刷新:从并发雪崩到单例锁 + 请求队列的完整实现
前端·http
tiandyoin1 小时前
IPCONFIG重置网络
网络·ip·dfs·dns·vpn·cmd
Ether IC Verifier1 小时前
CPU/GPU/NPU/DPU功能详解与AI应用分析
网络·人工智能·网络协议·tcp/ip·计算机网络·dpu
TheRouter2 小时前
把 ClaudeCode 换成DeepSeek V4:两行配置,成本立省80%(含 Anthropic 兼容接口)
网络·架构
云游牧者3 小时前
K8S网络策略全解-NetworkPolicy与GlobalNetworkPolicy实战
网络·容器·kubernetes·cni
志栋智能3 小时前
安全、稳定是超自动化运维的底座
网络·数据库·人工智能
Shingmc33 小时前
【Linux】传输层协议TCP
linux·网络·tcp/ip