http压缩gzip
‘壹’ http包支持gzip么
简述:
QQ空间提出一个需求,要求qzhttp支持chunked+gzip。每个chunk是一个独立的gzip压缩包,并提到雅虎是这么实现的。
分析结论:
1.雅虎的chunked+gzip的方式,每个chunk并不是一个独立的gzip压缩包。
2.如果采用chunked+gzip方式,并且每个chunk都是一个gzip压缩包的方式,浏览器不支持(用ie和chrome测试)。
一. 首先对于雅虎搜索chunked+gzip的一个抓包分析。
第一段chunk,前2个字节是标准的gzip包头0x1f8b
第二段chunk,前2个字节则不是标准的gzip包头。
如果将yahoo的http回包中头字段和chunk控制字段去掉保存起来,会得到一个标准的gzip包,可以用7-zip打开。
所以yahoo搜索的chunked+gzip模式中的每个chunk并不是一个可独立解压的gzip包。
二. 关于对浏览器对chunked+gzip的支持测试。
为了快速测试,用php脚本实现了一个简单的web server。(见下)
1. 每个chunk单独压缩。
用cat参数启动server (server的php脚本见下)
./chunked_gzip.php cat
‘贰’ http gzip会增加网络速度吗
gzip不是增加网络速度,而是减少网络传输的数据流量,只是传输的数据量少了(可以理解为网络负载少了),网络速度是不会增加的,还是和没有用gzip时的一样,gzip的作用是压缩,数据压缩了数据流量自然就减少了。
‘叁’ 浏览器是如何判定http返回内容是否需要gzip解压缩的
服务器返回的headers里面有表明 是否使用了压缩
‘肆’ 有个问题卡了好几天了。 是关于VC发送request,HTTP返回GZIP数据解压的问题。
如果您看到 .gz, .tar.gz 的文件,都是 gzip 程序压缩的杰作。
gzip 是 GNU 组织开发的一种压缩程序,跟 Windows 上的 ZIP 不太一样(稍后会介绍一个一样的)。
[root@linux~]# gzip [-cdt#] 档名
[root@linux ~]# zcat 档名.gz
参数:
-c :将压缩的资料输出到萤幕上,可透过资料流重导向来处理;
-d :解压缩的参数;
-t :可以用来检验一个压缩档的一致性~看看文件有无错误;
-# :压缩等级,-1 最快,但是压缩比最差、-9 最慢,但是压缩比最好!预设是 -6 ~
我们先介绍压缩的方法。当我们有一个文件叫做 big1.bmp,由于点阵图文件通常都很大,要用 gzip 压缩,命令要怎么下呢?
最简单的可以这样:
gzip big1.bmp
但是如果您希望它压出“最小的文件”,那么就加一个 -9 选项:
gzip -9 big1.bmp
当然,“最小的文件”的代价,就是花最久的时间压缩,如果您希望它在最快时间压缩好,而不计较压缩的比例,那就相反,加一个 -1 (注意,是数字,不是小写英文l)选项:
gzip -1 big1.bmp
而如果您没有加 -1也没有加 -9,它的默认相当于 -6。
另外常用的选项还有:
l -v 压缩过程当中显示进度。
l -r 将子目录中的文件全部压缩。
至于它还有解压缩的选项,我们刻意将它挪到下一个命令中gunzip 再说明。
gunzip [-选项] [文件名.gz]
将 .gz 压缩文件解压
gunzip 命令与 gzip 命令相对,专门把 gzip 压缩的 .gz 文件解压缩。如果您有已经压缩过的文件,例如 big1.gz,这时就可以用解压缩:
gunzip big1.gz
这个命令也可以用 gzip 自己来完成,效果完全一样:
gzip -d big1.gz
其实在有些版本的Linux 上,gunzip是去调用 gzip,顺便帮您加上个 -d 选项罢了(用链接文件做的)!但是有些版本不是,是一个真的程序。不过无论 gunzip到底是一个实在的程序,还是仅是一个连接,都不重要了。因为 gzip 这个程序,本身可以负责压缩,也可以解压缩,一物两用。(不见得每种压缩和解压缩程序都是这样。)所以,如果您记得 -d 选项,就可以根本不用记 gunzip 这个命令了。
gunzip甚至还可以去解其他压缩程序如 Compress 或 ZIP 压缩出来的文件。不过我们不建议您这样做,这样会让您自己很乱。而且它自己也承认,用它来解 zip 的文件并不是每一种情形都能完成。所以既然如此,何必这样麻烦呢?哪一种工具就固定做什么用,不是比较有条理又好记吗?
gunzip 有几个选项较常使用:
l -f 当解压时如果遇到有同名的文件存在,就直接覆盖,不必再询问。
l -r 将子目录中的文件全部解压缩。
l -v 解压缩过程当中显示进度。
同样,这些选项也可以再加在 gzip -d 上,效果一样。
‘伍’ 网页怎么压缩,大师们指点一下。
一.摘要
本文总结了如何为使用IIS托管的网站启用Gzip压缩, 从而减少网页网络传输大小, 提高用户显示页面的速度.
二.前言
本文的知识点是从互联网收集整理, 主要来源于中文wiki. 使用YSlow检测网站启用了哪些优化时, Gzip是十分关键的一项. 启动Gip压缩将立竿见影的减少页面的网络传输大小.
三.HTTP压缩概述
HTTP 压缩是在Web服务器和浏览器间传输压缩文本内容的方法。HTTP压缩采用通用的压缩算法如gzip等压缩HTML、javaScript或CSS文件。
压缩的最大好处就是降低了网络传输的数据量,从而提高客户端浏览器的访问速度。
当然,同时也会增加一点点服务器的负担。Gzip是比较常见的一种HTTP 压缩算法。
四.HTTP压缩工作原理
Web服务器处理HTTP压缩的工作原理如下:
1.Web
服务器接收到浏览器的HTTP请求后,检查浏览器是否支持HTTP压缩;
在用户浏览器发送请求的HTTP头中, 带有"Accept-Encoding: gzip, deflate"参数则表明支持gzip和deflate两种压缩算法.
2.如果浏览器支持HTTP压缩,Web服务器检查请求文件的后缀名;静态文件和动态文件后缀启动要所都需要在MetaBase.xml中设置.
静态文件需要设置:
HcFileExtensions Metabase Property
(单击跳转到MSDN说明) 动态文件需要设置: HcScriptFileExtensions Metabase Property (单击跳转到MSDN说明)
3.如果请求文件是HTML、CSS等静态文件并且文件后缀启用了压缩,则Web服务器到压缩缓冲目录中检查是否已经存在请求文件的最新压缩文件;
4.如果请求文件的压缩文件不存在,Web服务器向浏览器返回未压缩的请求文件,并在压缩缓冲目录中存放请求文件的压缩文件;
5.如果请求文件的最新压缩文件已经存在,则直接返回请求文件的压缩文件;
6.如果请求文件是ASPX等动态文件并且文件后缀启用了压缩,Web服务器动态压缩内容并返回浏览器,压缩内容不存放到压缩缓存目录中。
五. 在IIS中启用HTTP压缩
IIS默认并不支持HTTP压缩,需要进行简单的配置
1.打开Internet信息服务(IIS)管理器,右击"网站"->"属性"选择"服务"。在"HTTP压缩"框中选中"压缩应用程序文件"和"压缩静态文件",按需要设置"临时目录"和"临时目录的最大限制";
2.提醒: 经试验此步骤在本人机器上没有作用, 可以忽略. 在 Internet信息服务(IIS)管理器,右击"Web服务扩展"->"增加一个新的Web服务扩展...",在"新建Web服务扩展"框中输入扩名"HTTP Compression",添加"要求的文件"为C:WINDOWSsystem32inetsrvgzip.dll,其中Windows系统目录根据您的安装可能有所不同,选中"设置扩展状态为允许";
3.使用文本编辑器打开C:.xml(建议先备份), 找到Location ="/LM/W3SVC/Filters/Compression/gzip用于设置gzip压缩,找到Location ="/LM/W3SVC/Filters/Compression/deflate"用于设置deflate压缩. 上面两个节点紧挨着.并且设置的属性相同.
如果需要压缩动态文件,则将HcDoDynamicCompression设置为"TRUE",并在HcScriptFileExtensions中增加您要压缩的动态文件后缀名,如aspx;如果需要压缩静态文件,则将HcDoStaticCompression和 HcDoOnDemandCompression设置为"TRUE",并在HcFileExtensions中增加您需要压缩的静态文件后缀名,如 xml、css等;HcDynamicCompressionLevel和HcOnDemandCompLevel表示需要的压缩率,数值在0-10, 默认为0. HcDynamicCompressionLevel属性说明:
HcDynamicCompressionLevel Metabase PropertyHcOnDemandCompLevel 属性说明:HcOnDemandCompLevel Metabase Property说明: 这两个属性值一般推荐设置为
9, 具有最佳性价比.但是在我的window server 2003上, 压缩率无论如何设置, jQuery和jQuery
UI两个文件(58k/188k)压缩后的大小一直相同.(20k/45k). 下面是我的实例: Xml代码
1.<IIsCompressionSchemeLocation="/LM/W3SVC/Filters/Compression/deflate"
2.HcCompressionDll="%windir%system32inetsrvgzip.dll"
3.HcCreateFlags="0"
4.HcDoDynamicCompression="TRUE"
5.HcDoOnDemandCompression="TRUE"
6.HcDoStaticCompression="true"
7.HcDynamicCompressionLevel="9"
8.HcFileExtensions="htm
9. html
10. txt
11. js
12. css
13. swf
14. xml"
15.
HcOnDemandCompLevel="9"
16. HcPriority="1"
17. HcScriptFileExtensions="asp
18. aspx
19. dll
20. exe"
21. >
22.</IIsCompressionScheme>
23.<IIsCompressionSchemeLocation="/LM/W3SVC/Filters/Compression/gzip"
24. HcCompressionDll="%windir%system32inetsrvgzip.dll"
25. HcCreateFlags="1"
26. HcDoDynamicCompression="TRUE"
27. HcDoOnDemandCompression="TRUE"
28. HcDoStaticCompression="true"
29. HcDynamicCompressionLevel="9"
30. HcFileExtensions="htm
31. html
32. txt
33. js
34. css
35. swf
36. xml"
37. HcOnDemandCompLevel="9"
38. HcPriority="1"
39.
HcScriptFileExtensions
="asp
40. aspx
41. dll
42. exe"
43. >
44.</IIsCompressionScheme>
.csharpcode, .csharpcode pre { font-size: small; color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre
{ margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd
{
color:
#0000ff;
}
.csharpcode
.str
{
color:
#006080;
}
.csharpcode
.op
{ color: #0000c0; } .csharpcode .preproc { color:
#cc6633; } .csharpcode .asp { background-color:
#ffff00;
}
.csharpcode
.html
{
color:
#800000;
}
.csharpcode
.attr
{
color:
#ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%;
margin: 0em; } .csharpcode .lnum { color: #606060; }
4.编辑完毕后保存MetaBase.xml文件;如果文件无法保存,则可能IIS正在使用该文件。打开"开始"->"管理工具"->"服务",停止"IIS Admin Service"后,即可保存
5.最后,重新启动IIS。可以到HTTP压缩测试网站验证结果.以jQuery为例, 核心类库和UI类库原始大小分别是57k和188k,压缩后分别是20k和45k:
我们通过Http头中的: Content-Encoding:gzip 属性判断返回后的数据已经启用了gzip压缩:
使用YSlow检测, 当只启动静态文件压缩时:
Gzip压缩评级为B:
当同时启动了动态文件压缩时, Gzip压缩评级为A:
‘陆’ 如何使 XMLHTTP 支持 HTTP 1.1 的 gzip 压缩传送 dlee
XMLHTTP 是可以支持 HTTP 1.1 的 gzip 压缩方式传送数据的,不过要使用“MSXML2.ServerXMLHttp”这个 ActiveX 对象。
‘柒’ 怎么解压Http请求中返回的Gzip内容
您好,我来为您解答: 你在提交请求时不要加上Accept-Encoding: gzip, deflate,这样数据返回就不会是压缩的。 盒子上有个lvkZLibUtils,用其中的gZipDecompress方法即可解开! 希望我的回答对你有帮助。
‘捌’ 求助JQuery XMLHTTP 如何处理GZIP压缩数据
JavaScriptAjax
用GZIP压缩后, JQuery XMLHTTP获取的Response Data 如何显示
success: function(data) {
}
Servlet doPost
Java代码
Stringencoding=request.getHeader("Accept-Encoding");
if(encoding!=null&&encoding.indexOf("gzip")!=-1){
response.setHeader("Content-Encoding","gzip");
out=newGZIPOutputStream(response.getOutputStream());
}elseif(encoding!=null&&encoding.indexOf("comdivss")!=-1){
response.setHeader("Content-Encoding","comdivss");
out=newZipOutputStream(response.getOutputStream());
}else{
out=response.getOutputStream();
}
PrintWriterwriter=newPrintWriter(out);
writer.write("respdata");
writer.flush();