HTTP传输数据压缩

HTTP传输数据压缩

大家好,又见面了,我是全栈君。

一、基础

1、HTTP压缩是指: Web服务器和浏览器之间压缩传输的”文本内容“的方法。 HTTP采用通用的压缩算法,比如gzip来压缩HTML,Javascript, CSS文件。 能大大减少网络传输的数据量,提高了用户显示网页的速度。当然,同时会增加一点点服务器的开销。 本文从HTTP协议的角度,来理解HTTP压缩这个概念。 

2、HTTP内容编码和HTTP压缩的关联

HTTP压缩其实是HTTP内容编码的一种,在HTTP协议中,允许对内容(也就是Body部分)进行编码,可以采用gzip这样的编码。 从而达到压缩的目的。 也可以使用其他的编码把内容搅乱或加密,以此来防止未授权的第三方看到文档的内容,所以HTTP压缩其实就是HTTP内容编码的一种,大家不要混淆了两种概念。

3、HTTP压缩过程

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

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

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

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

 HTTP传输数据压缩

 

4、HTTP压缩之gzip、deflate压缩

(1)、什么是gzip

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

(2)、gzip的优点

a、利用Apache中的Gzip模块,我们可以使用Gzip压缩算法来对Apache服务器发布的网页内容进行压缩后再传输到客户端浏览器。这样经过压缩后实际上降低了网络传输的字节数,最明显的好处就是可以加快网页加载的速度。网页加载速度加快的好处不言而喻,除了节省流量,改善用户的浏览体验外。

b、另一个潜在的好处是Gzip与搜索引擎的抓取工具有着更好的关系。Google就可以通过直接读取gzip文件来比普通手工抓取更快地检索网页。在Google网站管理员工具(Google Webmaster Tools)中你可以看到,sitemap.xml.gz 是直接作为Sitemap被提交的。 

c、而这些好处并不仅仅限于静态内容,PHP动态页面和其他动态生成的内容均可以通过使用Apache压缩模块压缩,加上其他的性能调整机制和相应的服务器端 缓存规则,这可以大大提高网站的性能。因此,对于部署在Linux服务器上的PHP程序,在服务器支持的情况下,我们建议你开启使用Gzip Web压缩。

(3)、什么是default

default是同时使用了LZ77算法与哈夫曼编码(Huffman Coding)的一个无损数据压缩算法。它最初是由Phil Katz为他的PKZIP归档工具第二版所定义的,后来定义在RFC 1951规范中。

人们普遍认为default不受任何专利所制约,并且在LZW(GIF文件格式使用)相关的专利失效之前,这种格式除了在ZIP文件格式中得到应用之外也在gzip压缩文件以及PNG图像文件中得到了应用。default压缩与解压的源代码可以在自由、通用的压缩库zlib上找到。更高压缩率的default是7-zip所实现的。AdvanceCOMP也使用这种实现,它可以对gzip、PNG、MNG以及ZIP文件进行压缩从而得到比zlib更小的文件大小。在Ken Silverman的KZIP与PNGOUT中使用了一种更加高效同时要求更多用户输入的default程序。deflate是一种压缩算法,是huffman编码的一种加强。 deflate与gzip解压的代码几乎相同,可以合成一块代码。

(4)、default与gzip区别

deflate使用inflateInit(),而gzip使用inflateInit2()进行初始化,比 inflateInit()多一个参数: -MAX_WBITS,表示处理raw deflate数据。因为gzip数据中的zlib压缩数据块没有zlib header的两个字节。使用inflateInit2时要求zlib库忽略zlib header。在zlib手册中要求windowBits为8..15,但是实际上其它范围的数据有特殊作用,见zlib.h中的注释,如负数表示raw deflate。        

        Apache的deflate变种可能也没有zlib header,需要添加假头后处理。即MS的错误deflate (raw deflate).zlib头第1字节一般是0x78, 第2字节与第一字节合起来的双字节应能被31整除,详见rfc1950。例如Firefox的zlib假头为0x7801,python zlib.compress()结果头部为0x789c。        

        deflate 是最基础的算法,gzip 在 deflate 的 raw data 前增加了 10 个字节的 gzheader,尾部添加了 8 个字节的校验字节(可选 crc32 和 adler32) 和长度标识字节。

        安装它们的Apache Web服务器版本的差异。Apache 1.x系列没有内建网页压缩技术,所以才去用额外的第三方mod_gzip 模块来执行压缩。而Apache 2.x官方在开发的时候,就把网页压缩考虑进去,内建了mod_deflate 这个模块,用以取代mod_gzip。虽然两者都是使用的Gzip压缩算法,它们的运作原理是类似的。     

        压缩质量。mod_deflate 压缩速度略快而mod_gzip 的压缩比略高。一般默认情况下,mod_gzip 会比mod_deflate 多出4%~6%的压缩量。

        对服务器资源的占用。 一般来说mod_gzip 对服务器CPU的占用要高一些。mod_deflate 是专门为确保服务器的性能而使用的一个压缩模块,mod_deflate 需要较少的资源来压缩文件。这意味着在高流量的服务器,使用mod_deflate 可能会比mod_gzip 加载速度更快。即在服务器性能足够的情况下,使用mod_gzip,虽然会耗费服务器性能,但是值得(压缩更快更好);在服务器性能不足的情况下,使用mod_deflate 确保性能。 

        从Apache 2.0.45开始,mod_deflate 可使用DeflateCompressionLevel 指令来设置压缩级别。该指令的值可为1(压缩速度最快,最低的压缩质量)至9(最慢的压缩速度,压缩率最高)之间的整数,其默认值为6(压缩速度和压缩质 量较为平衡的值)。这个简单的变化更是使得mod_deflate 可以轻松媲美mod_gzip 的压缩。

 

二、实战

下面开始讲解IIS下的启用GZIP压缩,启用GZIP一共有两种方式,一种是代码启动,另一种是IIS启动

1、IIS启动GZIP压缩

IIS默认并不支持HTTP压缩,需要进行简单的配置

第一步:打开Internet信息服务(IIS)管理器,右击”网站”->”属性”,选择”服务”。在”HTTP压缩”框中选中”压缩应用程序文件”和”压缩静态文件”,按需要设置”临时目录”和”临时目录的最大限制”; 

转载于:https://www.cnblogs.com/GreenLeaves/p/6970605.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/108427.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • java日志级别(一般业务处理日志用什么级别)

    https://www.cnblogs.com/lingduqianli/p/7589173.html

  • 设置smtp服务器信息,SMTP服务器设置(IIS6.0)

    设置smtp服务器信息,SMTP服务器设置(IIS6.0)由IIS提供的简单邮件传输协议(SMTP)服务交付传出电子邮件的简单组件。消息的递送由消息传送到一个指定的SMTP服务器发起。根据收件人的电子邮件地址的域名,SMTP服务器启动与域名系统(DNS)服务器,它抬起头,然后返回该域的目标SMTP服务器的主机名通信。接下来,发起SMTP服务器直接通过传输控制协议/Internet协议(TCP/IP)端口25上的目标SMTP服务器通信,如果收件人的…

  • hresult 0x80070005错误原因_win10灾难性故障

    hresult 0x80070005错误原因_win10灾难性故障在Winform里面用AxWindowsMediaPlayer控件,控件放在tabControl里面,当切换选项卡时报了“灾难性故障(异常来自HRESULT:0x8000FFFF(E_UNEXPECTED))” 崩溃,后来不直接拖控件到页面上,是先申明一个AxWindowsMediaPlayer对象,在需要播放媒体时在动态加载,否则移除该控件。就不出现这个问题了。不懂!

  • MySQL explain详解

    MySQL explain详解MySQLexplain详解Explain简介本文主要讲述如何通过explain命令获取select语句的执行计划,通过explain我们可以知道以下信息:表的读取顺序,数据读取操作

  • 南大lamda实验室失败面经分享「建议收藏」

    南大lamda实验室失败面经分享「建议收藏」2019年保研基本上尘埃落定,博主最后去了北大信科读研。关于北大的夏令营,把北大往年的夏令营真题刷一刷https://blog.csdn.net/caozixuan98724/article/details/93521208,面试就个凭造化了。值得说的内容不多,反而是最早开始的南大一行,值得说的地方很多,非常有趣,作为我参加的第一个保研面试,跪的一塌糊涂。初审首先先讲lamda实验室的初审…

  • amule 服务器 使用方法

    amule 服务器 使用方法

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号