接口测试(八)--压缩解压

今天认识了一位很有名的老中医,与之闲聊。他问我做什么的,我说:做软件测试的。当听到我的职业之后,他建议我:做你们这一行,夏天尽量不要开空调,多运动,少吃冰淇淋,不要经常买饮料喝,不能喝啤酒,更不能喝红酒,多喝白开水,出门应该少打车多坐公交或步行,不要在外面吃饭,尽量吃素,少吃肉类,特别是海鲜!
我点了点头,老中医接着说 :
毕竟,你们收入太低了…

我竟然无言以对。。

---------------------------进入正题---------------------------

一、什么是HTTP压缩?

HTTP压缩采用通用的压缩算法如gzip等压缩HTML、JavaScript或CSS文件。

1.GZIP是一种数据格式,默认且目前仅使用deflate算法压缩data部分;Gzip是一种流行的文件压缩算法,现在的应用十分广泛,尤其是在Linux平台。当应用Gzip压缩到一个纯文本文件时,效果是非常明显的,大约可以减少70%以上的文件大小。这取决于文件中的内容。

2.DEFLATE压缩与解压的源代码可以在自由、通用的压缩库zlib上找到。

更高压缩率的DEFLATE是7-zip所实现的。AdvanceCOMP也使用这种实现,它可以对gzip、PNG、MNG以及ZIP文件进行压缩从而得到比zlib更小的文件大小。在Ken Silverman的KZIP与PNGOUT中使用了一种更加高效同时要求更多用户输入的DEFLATE程序。

deflate是一种压缩算法,是huffman编码的一种加强。

deflate与gzip解压的代码几乎相同,可以合成一块代码。

 

http压缩可以分为两种,一种是客户端压缩,还有一种是服务端压缩。

先看下 服务端压缩。

二、用fiddler找到一个response里Content-Encoding: gzip参数为gzip的url

(好像服务端用gzip压缩过的比较难找,别捉急,后面会讲到怎么去找)

request:client里参数Accept-Encoding: gzip, deflate(说明客户端支持解压gzip,如右上图)

response:Content-Encoding: gzip(说明服务端传过来的格式是gzip格式,如右下图)

很显然服务端返回的gzip格式显示的是乱码

三、HTTP压缩工作原理

1. 浏览器发送Http request 给Web服务器, request 中有Accept-Encoding: gzip, deflate。 (告诉服务器, 浏览器支持gzip压缩)

  2. Web服务器接到request后, 生成原始的Response, 其中有原始的Content-Type和Content-Length。

  3. Web服务器通过Gzip,来对Response进行编码, 编码后header中有Content-Type和Content-Length(压缩后的大小), 并且增加了Content-Encoding:gzip. 4. 把Response发送给浏览器。

  5. 浏览器接到Response后,根据Content-Encoding:gzip来对Response 进行解码。 获取到原始response后, 然后显示出网页。

四、fiddler如何模拟解压服务端response数据

  1. 先打开测试论坛主页http://120.25.145.237/upload/forum.php

2.fiddler先清屏(命令行输入cls,回车)


3.crtl+f5刷新,你懂得(上章已经讲过)

4.找到最上面那个url(论坛主页)

5.点开查看,如下图


Raw:Transfer-Encoding: chunked(很显然,服务端传过来数据没加密)

6.点开Transformer区域,如下图


7.点击黄色区域解码后,再回到Raw,发现response编码格式已经变成html了

fiddler比较人性化地方:当你点左侧url时,如果response有压缩加密,fiddler会在response上方区域显示黄色栏。也可以点工具栏左上方‘Decode‘按钮,这样会全部自动解压

五、fiddler如何模拟服务端response数据压缩

  1. 重复上面操作,到第六步后,把勾去掉,如图


2.此时HTTP Compression区域是可选状态了,选中GZIP项后,会发现response body字节数变小了很多


3.回到Raw界面,Content-Encoding: gzip,下方显示乱码了,说明已压缩成功

六、服务端压缩格式:

可以参考上面第一张图,红色区域

HTTP Compression

None 无压缩处理

gzip  表明实体采用GNU zip编码

deflate  表明实体是用zlib的格式压缩的

其它的没研究过

七、客户端压缩

有时候客户端提交的表单数据较大时,也可以先再客户端压缩后,再发给服务器,原理跟服务端压缩差不多,就不多说了。

八、压缩好处

对比上面两张图,压缩类型选择None时候

response body:69,122 bytes

压缩类型选择gzip时候

response body :12,285 bytes

可以算下压缩比例为18%左右,能节省80%左右流量,很明显最大的好处就是给用户省流量,给服务端节省带宽。使网页加载速度加快,节省流量,改善用户的浏览体验。(对于电脑用户来说没什么,但是对于手机党,流量伤不起啊!)

九、压缩缺点

既然压缩有这么多好处,那么为什么不是所有的都采用压缩呢。也许压缩几条http请求没太大影响,当请求个数是几百上千时,如果每次都压缩,会给客户端和服务端造成较大负担(毕竟会经过压缩解压两道工序)所以一般页面请求数据较大时,采用压缩是很有必要的

 

十、流量测试

经常有小伙伴问:流量怎么测?用什么工具?

当问这个问题的时候,估计你平常测试也没关注过流量,直到有一天你们客户反馈耗流太大。然后领导把难题丢给你:嘿,你不是做测试的吗?去把流量测下。于是你就各种求助,终于找到一个测试流量工具,发现确实消耗了很多流量,然后你又把难题甩给开发。开发也看了半天,找不到头绪,然后告诉你,这个没办法,就是要消耗这么多流量。(谁让你拿不出有力证据呢)

看完这篇后,你还在找工具测流量么,只需要抓包,找到罪魁祸首,定位到某个url请求。然后告诉你们开发,你这条请求耗流太大,没做压缩处理。接下来,你就可以坐等开发跪舔你吧~~~~

原文地址:https://www.cnblogs.com/woaixihongshi/p/8194236.html

时间: 2024-08-04 15:27:57

接口测试(八)--压缩解压的相关文章

基于哈夫曼编码的压缩解压程序

这个程序是研一上学期的课程大作业.当时,跨专业的我只有一点 C 语言和数据结构基础,为此,我查阅了不少资料,再加上自己的思考和分析,实现后不断调试.测试和完善,耗时一周左右,在 2012/11/19 完成.虽然这是一个很小的程序,但却是我完成的第一个程序. 源码托管在 Github:点此打开链接 一.问题描述: 名称:基于哈夫曼编码的文件压缩解压 目的:利用哈夫曼编码压缩存储文件,节省空间 输入:任何格式的文件(压缩)或压缩文件(解压) 输出:压缩文件或解压后的原文件 功能:利用哈夫曼编码压缩解

Lniux常见的压缩/解压命令小结

转载请注明: 导航制导与控制实验室 2014年12月16日 在linux开发过程中,经常会遇资料的打包/解包.压缩/解压:本文我将在linux系统中常用的命令进行了整理和分类,内容如下: 1.tar 命令,主要是对Dir先归档,在借助其他命令处理归档文件: 2.单个文件的压缩命令,对单个文件进行处理的命令,有时也可以借助tar命令对目录先打包,再进行压缩: 3.zip.rar压缩命令,即可对单个文件也可对目录进行压缩处理,该方法利于不同操作系统的处理: 该文章只是作者本人的理解,有些命令还会验证

压缩&&解压命令汇总

以下是搜集的Linux系统下,压缩&&解压命令,以备参考使用. .tar 解包: tar xvf FileName.tar 打包:tar cvf FileName.tar DirName    tar cvf a.tar a.txt b.txt c.txt (注:tar是打包,不是压缩!) --------------------------------------------- .gz 解压1:gunzip FileName.gz 解压2:gzip -d FileName.gz 压缩:g

支持文件的流式压缩/解压IP*Works! Zip

IP*Works! Zip是为应用程序添加压缩功能的完全可控件组件包.使用简单.速度快并且效率很高,是一个为桌面和网上应用程序添加压缩和解压缩功能的组件套包./n software IP*Works! Zip支持Zip.Tar.Gzip 和 Jar压缩标准,特别的,它支持流式压缩.加密压缩,在压缩包里就可以直接删除文件.我们目前提供完全可控的纯C# .NET组件.纯Java Beans. 产品特征: IP*Works! Zip基于纯C#代码,是完全可控的.NET组件,不依赖于任何外部代码.是完全

Lucene4.2源码解析之fdt和fdx文件的读写——fdx文件存储一个个的Block,每个Block管理着一批Chunk,通过docID读取到document需要完成Segment、Block、Chunk、document四级查询,引入了LZ4算法对fdt的chunk docs进行了实时压缩/解压

前言 通常在搜索打分完毕后,IndexSearcher会返回一个docID序列,但是仅仅有docID我们是无法看到存储在索引中的document,这时候就需要通过docID来得到完整Document信息,这个过程就需要对fdx/fdt文件进行读操作.为了更清楚地了解fdx/fdt文件的作用,本文把fdx/fdt文件的读和写整合到了一起,尽管这在Lucene中是两个分开的过程. 1. 索引生成阶段 索引生成阶段包含着一个复杂的过程,所以了解本文前最好对Lucene的索引架构有一定的了解,可以参考博

linux下各种文件压缩解压(转载)

Linux下最常用的打包程序就是tar了,使用tar程序打出来的包我们常称为tar包,tar包文件的命令通常都是以.tar结尾的.生成tar包后,就可以用其它的程序来进 行压缩了,所以首先就来讲讲tar命令的基本用法:  tar命令的选项有很多(用man tar可以查看到),但常用的就那么几个选项,下面 来举例说明一下:  # tar -cf all.tar *.jpg  这条命令是将所有.jpg的文件打成一个名为all.tar的包.-c是表示产生新的包 ,-f指定包的文件名.  # tar -

Centos压缩&解压

centos中的文件压缩与解压用得频率还是较大的,许多的压缩软件都是下载到linux系统上,然后解压安装,使用的是 tar 命令,这个命令又有主选项和辅助选项,这里就来总结一下吧,以方便自己的使用. Tar 语法:tar [主选项+辅选项] 文件或者目录 主选项: c 创建新的档案文件.如果用户想备份一个目录或是一些文件,就要选择这个选项.相当于打包. x 从档案文件中释放文件.相当于拆包. t 列出档案文件的内容,查看已经备份了哪些文件. 特别注意,在参数的下达中, c/x/t 仅能存在一个!

SAPCAR 压缩解压软件的使用方法

SAPCAR 是 SAP 公司使用的压缩解压软件,从 SAP 网站下载的补丁包和小型软件基本都是扩展名为 car 或 sar 的,它们都可以用 SAPCAR 来解压.下面是它的使用说明: 用法: 创建新档案:SAPCAR -c[vir][f archive] [-P] [-C directory]   [-A filename] [-T filename] [-X filename]   [-p value] [-V] file1 file2 ... 列出一个档案的内容:SAPCAR -t[vs

Linux压缩解压工具--日常学习

Date:2017-04-08 命令(对应格式):gzip(.gz)  bzip2(.bz2)  xz(.xz)  compress(.z)   tar(.tar) 1.gzip 语法:gzip  选项  FILE 常用选项:-d   -#    -c (1)-d(decompressiom):解压 解压的方式有两种:"gizp  -d   FILE" 和"gunzip  FIEL" eg: tmp]# ls -lh messages(-h:human-readdb