gzip的介紹以及web伺服器對檔案壓縮的支援

aitangyong發表於2014-03-12

GZIP和HTTP

       GZIP是一種檔案壓縮標準,能夠大幅度的減少檔案本身大小和佔用的儲存空間。現今已經成為Internet 上使用非常普遍的一種資料壓縮格式,或者說一種檔案格式。

通過HttpWatch或者burp suite等抓包工具,可以檢視http頭部 Accept-Encoding的值,如果該欄位顯示的是"gzip,deflate",就代表該瀏覽器能夠識別gzip格式的檔案。


這樣伺服器就可以將檔案壓縮成gzip,以便減少瀏覽器下載檔案的時間。gzip和伺服器對處理gzip過程簡介:

http://www.cnblogs.com/witxjp/archive/2003/12/17/1986210.html


http://www.cnblogs.com/linzhenjie/archive/2013/03/05/2943635.html

靜態壓縮和動態壓縮

      可以預先將html/css等檔案,使用gzip工具直接壓縮,將壓縮後的檔案放在伺服器,瀏覽器直接引用壓縮後的檔案就可以了,這樣可以節省動態壓縮帶來的開銷。比如
myapp.js檔案,通過壓縮後變成myapp.gzjs。在html中可以通過<script type="text/javascript" src="myapp.gzjs"></script>。


gzip的實現

1、java jdk內建對gzip的支援,可以通過使用GZIPInputStream和GZIPOutputStream進行壓縮和解壓縮。
這2個類使用都比較簡單,這裡不再贅述。


2、主流的web伺服器也都內建了對於檔案的gzip壓縮功能,比如jboss和tomcat。
tomcat的配置可以參考http://blog.csdn.net/yanghongchang_/article/details/8047577(優化網站響應時間tomcat新增gzip)


weblogic的配置可以參考http://www.blogjava.net/xggc63/archive/2011/05/25/342979.html
jboss的配置如下,在jboss-4.2.3.GA\server\default\deploy\jboss-web.deployer\server.xml中新增

<Connector port="8080" address="${jboss.bind.address}"    
         maxThreads="250" maxHttpHeaderSize="8192"
         emptySessionPath="true" protocol="HTTP/1.1"
         enableLookups="false" redirectPort="8443" acceptCount="100"
         connectionTimeout="20000" disableUploadTimeout="true"  URIEncoding="utf-8"  
   compressableMimeType="text/html,text/xml,text/css,text/javascript,application/x-javascript,application/javascript" 
   compressionMinSize="2048" noCompressionUserAgents="gozilla,traviata" />


3、也可以使用第三方工具,實現gzip壓縮和快取等.這裡使用的是tk-filters,
可以到http://sourceforge.net/projects/filterlib/ 下載,使用方式也比較簡單,
參考http://blog.csdn.net/yanghongchang_/article/details/8047577
http://blog.csdn.net/coooliang/article/details/8974102

 

4、自定壓縮實現
http://blog.chinaunix.net/uid-26284395-id-3043664.html
http://www.cnblogs.com/hemingwang0902/archive/2012/01/12/compression-filter.html

http://www.onjava.com/pub/a/onjava/2003/11/19/filters.html (Two Servlet Filters Every Web Application Should Have


相關文章