0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

深入浅出了解华为云 API 网关的 Gzip 功能

jf_94205927 来源:jf_94205927 作者:jf_94205927 2023-11-12 17:36 次阅读

Gzip 是什么

Gzip 是一种用于数据压缩的编码格式,经常被使用在基于 HTTP 协议的网络传输中。Gzip 功能允许服务器在传输数据是对其进行压缩,从而减小传输的数据量,加快页面加载速度,这对于节省带宽和提高用户体验非常有用。本文将从 Gzip 使用场景、Gzip 原理、Gzip 在 nginx 中的应用以及华为云 API网关的 Gzip 功能实现几个方面介绍 Gzip。

Gzip 使用场景

Gzip 能够提升传输速度和降低带宽消耗,因此适合应用 Gzip 的场景有很多。

网页传输:在 web 开发中,使用 Gzip 可以减小文件大小,从而加快页面加载速度。

移动应用通信:在移动应用中,使用 Gzip 可以降低移动网络的数据消耗,加快数据传输速度,提升用户体验。

文件备份和传输:在进行文件备份或者文件传输时,使用 Gzip 可以减小备份文件的大小,节省存储空间和传输带宽。

网络传输限制:在网络带宽受限的环境下,使用Gzip可以减小数据传输量,提升网络性能。

API 通信:对于RESTfulAPI或其他数据接口的传输,使用Gzip可以降低传输的数据量,减少对网络带宽的占用,提升响应速度。

Gzip 原理

gzip 使用 deflate 算法进行压缩。其原理主要包括 LZ77 算法以及 Huffman 编码(哈夫曼编码)。

LZ77 算法

LZ77 算法是将重复字符串替换为长度距离对来达到压缩的目的。长度是重复字符串的长度,距离是重复字符串与第一个出现该字符串的距离,下图是一个简单的示例:

wKgaomVOOJiAUGSzAAAUUXecyug847.png

在 LZ77 算法中,主要运用了基于滑动窗口的字典压缩算法。首先是滑动窗口:

wKgZomVOOJmAYqfRAAALlE0EfZw289.png

以上图为例,一开始,查找区是没有字符的。滑动窗口从 K 开始移动,依次在查找区尝试查找当前指向字符及之后字符的最长匹配,直到滑动窗口区不再有字符为止。这里就涉及到另外一个问题了,如何在查找区中快速的找到与滑动窗口中匹配的字符,LZ77 显然不会采取暴力遍历查找的方法,通常使用哈希数组来实现字典的快速搜索。在哈希数组中有两个数组,一个数组用来存放最新重复字符串的哈希地址,一个数组用来解决哈希冲突。具体以下图为例进行说明:

wKgaomVOOJqAUpPkAAKB7z4YWsI895.png

当第一次扫描 ABC 时,对应数组 1 中 4 号位置为空,因此不用转化为长度距离对。当第二次扫描到 ABC 时,对应数组 1 中 4 号位置存放的是 1,于是将 4 号位置替换为 6,再将 1 放置在数组 2 中的 6 号位置,此时数组 2 的 6 号位置存放的是 1,对当前字符串后的字符继续和 1 位置对应字符后的字符继续进行匹配,记录最长匹配字符长度。然后在数组 2 中查找 1 号位置,如果为空则结束匹配,最后将匹配到的最长字符替换为长度距离对。

Huffman 编码

Huffman 编码的原理是基于哈夫曼树。哈夫曼树是一种最优二叉树,是一种带权路径长度最短的二叉树。

以下是哈夫曼树的构造过程:

假设有 A、B、C、D、E 五个字母,他们对应出现的次数分别为 5,6,8,12,20

wKgZomVOOJqACtcXAAK-fbZiow4958.png

构造哈夫曼树的基本流程:将 A、B、C、D、E 看作是只有一个结点的树,其中出现的次数作为他们的权值。将权值和最小的两个数进行合并称为一个新树,权值较小的树作为左子树,权值较大的树作为右子树,新树的根结点权值为两子树之和,然后将新树也加入到树的集合中,重复上述流程知道又有一棵树为止。

针对哈夫曼树编码,左分支为 0,右分支为 1。可得出 A、B、C、D、E 的编码如下:

wKgaomVOOJuAVdo9AAAVH5PPyR8818.png

从最后的编码来看,出现次数最多的 E 的编码长度比出现次数较少的 A 或 B 要少。最终频率高的字符会使用较短的编码,频率低的字符会使用较长的编码,总体的编码长度就会变小,从而达到压缩的结果。

Gzip 在 Nginx 中的应用

Nginx 作为当下很流行的开源网页服务器和反向代理服务器,原生支持了 Gzip 的功能。但是在 Nginx 中 Gzip 功能默认是不开启,需要在配置文件中配置相关指令才可以开启 Gzip 功能。常见的配置项如下:

wKgZomVOOJuAbgeLAAQ0_ftpfAo173.png

华为云 API网关的 Gzip 功能

华为云API网关(APIG)为企业和开发者提供的高性能、高可用、高安全的云原生网关服务,融合安全、负载均衡、流量入口治理、微服务流量治理、运维等多项能力,也支持 Gzip 压缩功能。用户可以通过一键式开关控制 Gzip 功能的开启。同时 APIG 还开放了压缩等级,用户可以通过配置不同的压缩等级,根据自己的需求对 Gzip 功能进行性能调优。当一个客户端发送一个 HTTP 请求时,需要包含一个 Accept-Encoding 头部用来指示客户端支持的压缩算法。

APIG 会根据 GZIP 开关来判断是否进行压缩。在开关开启的状态下,APIG 会将响应内容压缩,然后将压缩后的响应发送给客户端(如果客户端已经进行 Gzip 压缩,那么 APIG 将不会进行二次压缩)。客户端收到响应后,会根据响应头部的 Content-Encoding 字段判断是否经过了压缩。如果响应被压缩了,客户端会进行解压缩,以获取原始的内容。

可以参考以下步骤打开 Gzip 开关及设置压缩等级:

打开华为云 APIG 控制台,依次进入实例管理-->配置参数,在页面列表中找到参数 gzip 如下:

wKgaomVOOJyAGw8LAABXZy_ZJIc295.png

如上图,gzip 功能为开启状态,且压缩等级为 6。

此外,APIG 还提供了 Debug 功能用以调试 Gzip 功能。首先依次打开 API 列表,然后点击创建 API。

wKgZomVOOJyAeoX2AAGQXfX0NVE360.png

在填写好 API 详细信息后,在后端配置选项页面选择 Mock 后端,并且增加 header 参数-content-length(参数值需要大于等于 1028,否则 gzip 功能将不生效。)

wKgaomVOOJ2ADw3AAAGLWE-ayl0835.png

然后进入 API 的调试界面,在 Headers 中添加参数:Accept-Encoding,对应参数值为 gzip。在响应结果中,如果有 Content-Encoding:gzip出现,即代表 Gzip 功能生效。

wKgZomVOOJ6AWV9wAAMtoVN6byQ970.png

Gzip 自首次发布以来,已经成为互联网上常用的压缩格式之一。各种高性能的开源代理如 Nginx、Envoy 等都原生支持 Gzip 的功能。在传输速度和降低带宽消耗方面,Gzip 有着十分强大的优势,希望本文能帮助到想要了解 Gzip 背后原理及其应用的人。

另外,如果你有更多关于华为云产品的疑问,可扫码添加华为云专家的联系方式,咨询相关问题。

审核编辑 黄宇


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 网关
    +关注

    关注

    9

    文章

    4727

    浏览量

    51823
  • API
    API
    +关注

    关注

    2

    文章

    1530

    浏览量

    62759
  • 华为云
    +关注

    关注

    3

    文章

    2740

    浏览量

    17759
收藏 人收藏

    相关推荐

    【贝启科技BQ3568HM开源鸿蒙开发板深度试用报告】3 - 智能家居中控屏连接华为IoTDA物联网平台

    了应用侧API,实现设备数据采集、命令下发、设备管理等业务场景。 有关应用侧API参见:应用侧API参考_设备接入 IoTDA_华为。 为
    发表于 02-06 09:39

    深入解析华为 X 实例保障上业务安全的关键策略

    华为作为全球领先的服务提供商之一,在安全性方面为用户提供了全面的保障。其华为 X 实例凭借强大的性能和安全性,成为众多企业业务部署的
    的头像 发表于 01-03 09:25 266次阅读
    <b class='flag-5'>深入</b>解析<b class='flag-5'>华为</b><b class='flag-5'>云</b> X 实例保障<b class='flag-5'>云</b>上业务安全的关键策略

    api驱动的服务是什么意思?

    API驱动的服务是指利用API技术来驱动和提供服务的模式。在这种模式下,服务提供商会公开一系列的A
    的头像 发表于 11-14 10:06 312次阅读

    华为CodeArts API助力企业数字化转型

    工具显得尤为重要,它能够显著帮助企业提升API的研发与管理效率,华为CodeArts API正是这样一位助力企业数字化转型的好帮手。
    的头像 发表于 11-09 16:07 595次阅读

    工业网关有什么功能和优势

    的重要工具。 功能 设备连接与通信 工业网关支持多种网络协议和连接方式,如5G/4G/Wi-Fi/以太网等,能够将各种工业设备(如PLC、仪器仪表、CNC机床、传感器等)与平台无缝
    的头像 发表于 10-25 14:33 249次阅读

    深入浅出系列之代码可读性

    原创声明:该文章是个人在项目中亲历后的经验总结和分享,如有搬运需求请注明出处。 这是“深入浅出系列”文章的第一篇,主要记录和分享程序设计的一些思想和方法论,如果读者觉得所有受用,还请“一键三连
    的头像 发表于 08-09 16:00 339次阅读

    钡铼技术BL102 PLC转MQTT网关:三菱PLC数据高效上传至华为平台

    钡铼技术推出了PLC转MQTT网关来实现三菱PLC数据的高效采集与上传至华为平台,一起来看看。
    的头像 发表于 07-31 14:48 702次阅读
    钡铼技术BL102 PLC转MQTT<b class='flag-5'>网关</b>:三菱PLC数据高效上传至<b class='flag-5'>华为</b><b class='flag-5'>云</b>平台

    利用钡铼Modbus转MQTT网关实现数据高效上传至华为平台

    西门子PLC通常通过Modbus协议进行数据传输,但平台更倾向于使用MQTT等轻量级、高效的数据传输协议。为此,钡铼技术推出了 Modbus转MQTT网关实现西门子PLC数据的高效采集与上传至
    的头像 发表于 07-30 13:53 472次阅读
    利用钡铼Modbus转MQTT<b class='flag-5'>网关</b>实现数据高效上传至<b class='flag-5'>华为</b><b class='flag-5'>云</b>平台

    钡铼Modbus转MQTT网关支持一键接入华为

    网关BL100,作为一款高性能、高性价比的物联网网关,支持Modbus设备接入华为平台,为工业设备的智能化升级提供了有力支持。 一、BL100网关
    的头像 发表于 07-29 13:47 344次阅读
    钡铼Modbus转MQTT<b class='flag-5'>网关</b>支持一键接入<b class='flag-5'>华为</b><b class='flag-5'>云</b>

    IEC104转MQTT网关支持Zabbix、阿里华为、亚马逊AWS、ThingsBoard、Ignition

    网关BE113作为这一融合过程中的关键设备,其能够将IEC 104协议的数据转换为MQTT消息,从而轻松接入Zabbix、阿里华为、亚马逊AWS、ThingsBoard、Igni
    的头像 发表于 07-25 16:55 761次阅读
    IEC104转MQTT<b class='flag-5'>网关</b>支持Zabbix、阿里<b class='flag-5'>云</b>、<b class='flag-5'>华为</b><b class='flag-5'>云</b>、亚马逊AWS、ThingsBoard、Ignition

    请问ESP是否支持LiteOS+华为IOT+AT的方式?

    我们想使用ESP32 AT模式连接华为IOT平台,并且ESP32要运行LiteOS,请问现在ESP32支持这个功能
    发表于 07-19 07:32

    是否可以扩展esp_iot_rtos_sdk以具有api功能来进行更新?

    是否可以扩展esp_iot_rtos_sdk以具有 api 功能来进行更新?SDK 编程指南(尽管我认为它不适用于 rtos sdk)表明存在
    发表于 07-15 08:19

    工业网关的作用与功能分享

    一、引言 随着工业4.0和物联网(IoT)技术的快速发展,工业网关作为连接工业现场设备与网络的重要节点,其作用与功能日益凸显。本文将对工业网关的作用与功能进行详细的阐述,以期为读者提供
    的头像 发表于 06-20 16:05 789次阅读

    深入浅出谈TDR阻抗测试

    、脉宽、时序、抖动或噪声内容的任何事物都会影响整个系统的性能和可靠性。为保证信号完整性,必须了解和控制信号经过的传输环境的阻抗。阻抗不匹配和不连续会导致反射,增加系
    的头像 发表于 06-06 08:28 7142次阅读
    <b class='flag-5'>深入浅出</b>谈TDR阻抗测试

    华为发布 CodeArts API,为 API 护航

    华为 CodeArts API 保证了 API 各阶段数据高度一致,为开发者提供友好易用的 API 全流程端到端解决方案。
    的头像 发表于 05-09 23:17 632次阅读
    <b class='flag-5'>华为</b><b class='flag-5'>云</b>发布 CodeArts <b class='flag-5'>API</b>,为 <b class='flag-5'>API</b> 护航