使用nginx返回gzip类型数据
2019-12-26 本文已影响0人
雷神VeryYoung
背景
系统上线后,其中有一功能是获取客户源站数据,该功能由于客户返回数据量巨大经常超时,客户寻思改返回gzip格式的数据。那开发改了这个功能,苦逼测试就得上吧!
问题
目前测试该功能需要构造mock返回gzip格式数据
解决方案
了解客户侧是用nginx,百度搜了一堆“nginx返回zip压缩包”解决方案,下面这个挺全面的:
#开启gzip
gzip on;
# 启用gzip压缩的最小文件,小于设置值的文件将不会压缩
gzip_min_length 1k;
# 设置压缩所需要的缓冲区大小
gzip_buffers 4 16k;
#压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
gzip_http_version 1.0;
#压缩等级 1-9 等级越高,压缩效果越好,节约宽带,但CPU消耗大
gzip_comp_level 3;
# 进行压缩的文件类型,默认就已经包含text/html。javascript有多种形式。其中的值可以在 mime.types 文件中找到。
gzip_types font/ttf font/opentype font/x-woff image/svg+xml;
# 是否在http header中添加Vary: Accept-Encoding,建议开启
gzip_vary on;
# 禁用IE 6 gzip , 因为IE6的某些版本对gzip的压缩支持很不好,会造成页面的假死
gzip_disable "MSIE [1-6].";
但是太全面了,我只要取其中的几个即可,于是一个个试,最后定位其中两个配置是必须项,必须项如下:
gzip on;
gzip_types application/json;
其中gzip_types项填你需要压缩的类型,我这边是application/json格式需要压缩。
验证结果
那如何校验是否设置成功了呢?有很多方案,这边介绍比较常见的两种:
验证一
使用curl命令:
curl -I -H "Accept-Encoding: gzip" "http://ip:port/configs"
返回的结果:
测试结果图
返回的结果非gzip格式时是上半部分,返回的结果是gzip格式时是下半部分(多了Content-Encoding: gzip信息)。
验证二
浏览器F12进入开发者工具,返回mock地址:http://ip:port/configs,在开发杂工具中的“Network”选择相关请求可以看到如下图,返回中的请求头(Response Headers)也是多了Content-Encoding: gzip信息。