GZip、deflate和sdch压缩(网摘整理)

GZip和deflate:

gzip是一种数据格式,默认且目前仅使用deflate算法压缩data部分;
deflate是一种压缩算法,是huffman编码的一种加强。

deflate与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) 和长度标识字节。

SDCH:

我们知道,为了加快网络传输,一般都使用gzip对文本进行压缩。如果你现在用最新版的chrome去访问页面,然后打开network控制面板,查看http headers,细心的你会发现在Request Headers里的Accept-Encoding不再是gzip,deflate,而是多了个sdch,变成了gzip,deflate,sdch。如图:

SDCH到底是什么

sdch是Shared Dictionary Compression over HTTP的缩写,即通过字典压缩算法对各个页面中相同的内容进行压缩,减少相同的内容的传输。如:一个网站中一般都是共同的头部和尾部,甚至一些侧边栏也是共同的。之前的方式每个页面打开的时候这些共同的信息都要重新加载,但使用SDCH压缩方式的话,那些共同的内容只用传输一次就可以了。

sdch主要分为3个部分:首次请求,下载字典,之后的请求。

这种方式最开始的时候是Google工具栏里为IE准备的,目前Chrome已经完全支持了,不过暂时还没发现哪个网站在使用。

SDCH与ajax+pushState

SDCH压缩方式是为了减少相同内容的传输的,同时之前介绍的ajax+pushState也是减少相同内容的传输,他们想达到的效果是一样的。只是SDCH是Google出的,可能今后一段时间只有Chrome浏览器支持,但pushState是HTML5的一个标准,目前已经有Chrome和Firefox支持,之后会有越来越多的浏览器支持。

个人觉得SDCH可能没有什么太大的发展,但可以作为一个新方向研究,并且在合适的时候添加到标准里,让网络传输越来越迅速。

时间: 2024-11-06 22:45:34

GZip、deflate和sdch压缩(网摘整理)的相关文章

网站前后端性能优化(网摘)

1. 减少http请求数 合并文件,通过把所有脚本置于一个脚本文件里或者把所有样式表放于一个样式表文件中,从而减少Http请求的数量. CSS Sprites是减少图片请求的首选方案.把所有的背景图片合并到一张图中,使用CSS的background-image 和background-position 属性去控制展现恰当的图片区域. 内联图片使用data: URL scheme 把图片数据嵌入页面,但这会增加Html文档的大小.2. 使用内容分布式网络 内容分布式网络(CDN)是一系列分布在不同

WebClient 支持 gzip, deflate

低调偷偷的下别人数据 发现下出来乱码- 用F12看看请求,原来人家是用了gzip压缩的- 试着自己加个Heading wc.Headers.Add("Accept-Encoding", "gzip, deflate"); 发现乱码依旧- 查查MSDN原来要设置HttpWebRequest.AutomaticDecompression http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.a

httpclient访问网站时设置Accept-Encoding为gzip,deflate返回的结果为乱码的问题

近期迷恋上httpclient模拟各种网站登陆,浏览器中的开发者工具中查看请求头信息,然后照葫芦画瓢写到httpclient的请求中去,requestheader中有这么一段设置: Accept-Encoding gzip,deflate 之前模拟其他网站的时候这块并没有太在意,因为无论我在httpclient中添加上这段还是不添加,请求网站数据都没有任何影响,也不影响网站的安全检测,所以当时也就没有特别关注这个设置,直到模拟登陆58同城网站的时候第一次遇到这个问题,当添加上以上的这行请求头设置

网摘笔记

原文: http://www.cnblogs.com/shockerli/p/2000-plus-line-php-notes.html //语法错误(syntax error)在语法分析阶段,源代码并未被执行,故不会有任何输出. /* [命名规则] */ 常量名 类常量建议全大写,单词间用下划线分隔 // MIN_WIDTH 变量名建议用下划线方式分隔 // $var_name 函数名建议用驼峰命名法 // varName 定界符建议全大写 // <<<DING, <<&l

知识管理:网摘如何快速存储不丢图不丢GIF、云同步、发博客。

摘要:我们在做文章收集或个人知识管理的时候,为了防止网络文章摘录内容丢失经常要归档.发布.编辑.共享一些从网上收集来的文摘,文摘有图文可能还有GIF动画,如用word,pdf 等板式会受到影响,且gif动画文件也会变成静态失去意义,本文主要是分享如何快速的复制粘贴发布.归档.发博文网络文章摘录. 一般来说,收集或个人知识管理(PKM)就是为了更高效的存储.检索.编辑.分享.组织吸纳创新所以本文,主要描述如何快速的存档网摘.发博客分享两个教程. 一.自用归档 可以选用 QQ空间日志:复制摘录的内容

Delphi 中DataSnap技术网摘

Delphi2010中DataSnap技术网摘 一.为DataSnap系统服务程序添加描述 这几天一直在研究Delphi 2010的DataSnap,感觉功能真是很强大,现在足有理由证明Delphi7该下岗了. DataSnap有三种服务模式,其中Service Application方式建立的Windows服务没有描述,描述部分是空的,可用如下方法添加服务描述: procedure TServerContainer.ServiceAfterInstall(Sender: TService);

socket 网摘

一.基本socket函数 Linux系统是通过提供套接字(socket)来进行网络编程的.网络的socket数据传输是一种特殊的I/O,socket也是一种文件描述符.socket也有一个类似于打 开文件的函数:socket(),调用socket(),该函数返回一个整型的socket的描述符,随后的连接建立.数据传输等操作也都是通过该socket实现. 1.socket函数 syntax:    int socket(int domain, int type, int protocol); 功能

TCP 状态图网摘

from unkonwn 1.CLOSED:起始点,在超时或者连接关闭时候进入此状态. 2.LISTEN:svr端在等待连接过来时候的状态,svr端为此要调用socket, bind,listen函数,就能进入此状态.此称为应用程序被动打开(等待客户端来连接). 3.SYN_SENT:客户端发起连接,发送SYN给服务器端.如果服务器端不能连接,则直接进入CLOSED状态. 4.SYN_RCVD:跟3对应,服务器端接受客户端的SYN请求,服务器端由LISTEN状态进入SYN_RCVD状态.同时服务

Volley学习(网摘)

Android网络通讯架构--Volley 1. Volley提供的功能简单来说,它提供了如下的便利功能: JSON,图像等的异步下载: 网络请求的排序(scheduling) 网络请求的优先级处理 缓存 多级别取消请求 和Activity和生命周期的联动(Activity结束时同时取消所有网络请求) 2.学习前的准备:下载volley源码打成jar包(我通过这个网址下载不下了,但是网络上很多好心人已经分享了源码) 下载地址: mirror of volley library from andr