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) 和長度標識位元組。
我們知道,為了加快網路傳輸,一般都使用gzip對文字進行壓縮。如果你現在用最新版的chrome去訪問頁面,然後開啟network控制面板,檢視http headers,細心的你會發現在request headers裡的accept-encoding不再是gzip,deflate,而是多了個sdch,變成了gzip,deflate,sdch。如圖:
sdch是shared dictionary compression over http的縮寫,即通過字典壓縮演算法對各個頁面中相同的內容進行壓縮,減少相同的內容的傳輸。
這種方式最開始的時候是google工具欄裡為ie準備的,目前chrome已經完全支援了,不過暫時還沒發現哪個**在使用。
sdch壓縮方式是為了減少相同內容的傳輸的,同時之前介紹的ajax+pushstate也是減少相同內容的傳輸,他們想達到的效果是一樣的。只是sdch是google出的,可能今後一段時間只有chrome瀏覽器支援,但pushstate是html5的乙個標準,目前已經有chrome和firefox支援,之後會有越來越多的瀏覽器支援。
個人覺得sdch可能沒有什麼太大的發展,但可以作為乙個新方向研究,並且在合適的時候新增到標準裡,讓網路傳輸越來越迅速。
抓取網頁的gzip deflate
現在的網頁普遍支援gzip壓縮,這往往可以解決大量傳輸時間,以豆瓣的主頁為例,未壓縮版本327k,壓縮了以後61k,為原來的1 5。這就意味著抓取速度會快5倍。然而python的urllib urllib2預設都不支援壓縮,要返回壓縮格式,必須在request的header裡面寫明 accept e...
SDC沙盒系統結構分析
1 系統構成 1 sdc機密資料保護系統分管理端,機密端,客戶端三部分 2 管理端是整個系統的控制中心,系統中只有乙個。機密端是存放機密資料的伺服器。2 管理端 對系統中的機密端,客戶端進行策略管理,日誌收集 策略管理包括 離線時間控制,網路控制,啟動機密程序控制等,客戶端解除安裝管理。3 機密端 ...
SDC 如何利用大資料贏得和影響消費者
如果你想將業務集中在重點上,那麼你需要知道你的客戶中哪些是最有價值的買家。給那些比別人消費更多的消費者使用mvp 最有價值的人 標籤是一種業務傳統。另一方面,一旦你識別了這些消費者,你就會發現他們是那些對品牌有長期忠誠的少數消費者。大資料在這方面十分有用,因為有很多方法可以幫助你更了解你的消費者。通...