本文会使用Fiddler来查看HTTP request和Response, 如果不熟悉这个工具,可以先参考[Fiddler教程]
HTTP压缩是指: Web服务器和浏览器之间压缩传输的”文本内容“的方法。 HTTP采用通用的压缩算法,比如gzip来压缩HTML,Javascript, CSS文件。 能大大减少网络传输的数据量,提高了用户显示网页的速度。当然,同时会增加一点点服务器的开销。 本文从HTTP协议的角度,来理解HTTP压缩这个概念。
阅读目录
- HTTP内容编码和HTTP压缩的区别
- HTTP压缩的过程
- 实例:用Fiddler观察HTTP压缩
- 内容编码类型
- 压缩的好处
- gzip的缺点
- gzip是如何压缩的
- HTTP Response能压缩,HTTP Request也是可以压缩的
HTTP内容编码和HTTP压缩的区别
HTTP压缩,在HTTP协议中,其实是内容编码的一种。
在http协议中,可以对内容(也就是body部分)进行编码, 可以采用gzip这样的编码。 从而达到压缩的目的。 也可以使用其他的编码把内容搅乱或加密,以此来防止未授权的第三方看到文档的内容。
所以我们说HTTP压缩,其实就是HTTP内容编码的一种。 所以大家不要把HTTP压缩和HTTP内容编码两个概念混淆了。
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. 然后把Response发送给浏览器。
4. 浏览器接到Response后,根据Content-Encoding:gzip来对Response 进行解码。 获取到原始response后, 然后显示出网页。
如下图:
实例:Fiddler观察HTTP压缩
眼见为实, 我们看一个实际的例子, 我发现博客园就使用了gzip压缩。
使用Fiddler可以清楚地看到。
在Fiddler中,每次都要手动去decode. 太麻烦。 点击工具栏上的"Decode"按钮,就可以自动decode了。
内容编码类型
HTTP定义了一些标准的内容编码类型,并允许用扩展的形式添加更多的编码。
Content-Encoding header 就用这些标准化的代号来说明编码时使用的算法
Content-Encoding值
gzip 表明实体采用GNU zip编码
compress 表明实体采用Unix的文件压缩程序
deflate 表明实体是用zlib的格式压缩的
identity 表明没有对实体进行编码。当没有Content-Encoding header时, 就默认为这种情况
gzip, compress, 以及deflate编码都是无损压缩算法,用于减少传输报文的大小,不会导致信息损失。 其中gzip通常效率最高, 使用最为广泛。
压缩的好处
http压缩对纯文本可以压缩至原内容的40%, 从而节省了60%的数据传输。
实例: 博客园首页压缩前是:46124 bytes. 压缩后是:16368bytes. 只有原先的35%。 节省了65%的数据传输,从而大大提高了性能
有图为证。
Gzip的缺点
JPEG这类文件用gzip压缩的不够好。
Gzip是如何压缩的
简单来说, Gzip压缩是在一个文本文件中找出类似的字符串, 并临时替换他们,使整个文件变小。这种形式的压缩对Web来说非常适合, 因为HTML和CSS文件通常包含大量的重复的字符串,例如空格,标签。
HTTP Response能压缩,HTTP Request也是可以压缩的
浏览器是不会对Request压缩的。 但是 一些HTTP程序在发送Request时,会对其进行编码。 如下图。
相关推荐
基于DWT-DCT-SVD和deflate压缩的数字水印方法python源码+Gui界面+演示视频 - 不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到...
Nodejs关于gzip deflate压缩详解.docx
jDocker.zip,用于DockerJavaDockerAPI客户端的Java fluent API客户端
将 WebSocket协议扩展实现为的插件。 安装 $ npm install permessage-deflate 用法 将插件添加到您的扩展中: var Extensions = require ( 'websocket-extensions' ) , deflate = require ( 'permessage-deflate'...
libdeflate, 用于 DEFLATE/zlib/gzip 压缩和解压缩的优化库 概述libdeflate是一个用于快速整个缓冲区压缩压缩和解压缩的库。支持的格式包括:DEFLATE ( 原始)zlib ( 带zlib包装的。k 。DEFLATE )gzip ( 一个带有gzip...
文件中给出了 gzip主要压缩算法 实现包括 gzip zip deflate 等程序
zip_deflate压缩易语言源码 天哥软件
资源分类:Python库 所属语言:Python 资源全名:zipfile-deflate64-0.2.0.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
易语言zlib deflate 解压缩源码
TinyDeflate作为C ++ 17模板函数的deflate / gzip解压缩器,仅需要最少的内存即可工作。 使用条款:Zlib版权所有:copyright:2018 Joel Yliluoma积极设置下的内存使用(backtr TinyDeflate作为C ++ 17模板函数的...
本文实例讲述了C#实现页面GZip或Deflate压缩的方法。分享给大家供大家参考。具体分析如下: .NET Framework里 System.IO.Compression下有两个可用于页面压缩的类,GZipStream和 DeflateStream. 在页面被传输之前,...
支持的格式:deflate zlib gzip#Cargo.toml [dependencies] flate2 =“ 1.0”压缩使用std :: io :: prelude :: *; 使用flate2 :: Compression; 使用flate2 :: write :: ZlibEncoder; fn main(){let mut e = ...
第一个软件,传输流/文件的压缩,利用Internet中惯常使用的gzip, deflate算法,可以和sun java的GZipInputStream和GZipOutputStream互操作 第二个软件,基于HTTP的压缩传输软件,可完全和IE的VBScript和...
从http协议的角度看–请求头 声明 acceopt-encoding: gzip deflate sdch (是指压缩算法,其中sdch是google倡导的一种压缩方式,目前支持的服务器尚不多) 服务器–>回应—把内容用gzip方式压缩—->发给浏览器 浏览<...
跟踪重定向并即时解压缩 gzip/deflate 请求正文。安装 npm i --save toscknpm test用法有关更多用例,请参阅 var tosck = require ( 'tosck' ) ;作者Charlike Mike 试剂 执照 版权所有 (c) 2015 Charlike Mike ...
Js算法 zip_deflate(压缩)与zip_inflate(解压),
用deflate库实现文本文件多步骤gzip压缩,按行切割。容易修改为文本源自不同场合(内存、网络)的多步骤压缩。
JS找齐了,源码通过精易模块调用JS代码,内附JS原文件地址,需要的回复下载。
EasyCompressor 一个压缩库,可实现许多压缩算法,例如LZ4,Zstd,LZMA,Snappy,Brotli,GZip和Deflate 。 它通过减少用于缓存的内存使用量和网络流量来帮助您提高性能。Nuget软件包包裹名字版本描述 包含GZip,...