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();