今天在路上偶爾想到,既然js,html,圖片等靜態內容可以通過http gzip壓縮的方式傳輸到瀏覽器(相對于普通的瀏覽過程HTML ,CSS,Javascript , Text ,它可以節省40%左右的流量),那用jsp,servlet等動態創建的內容是否也可以壓縮傳輸呢?還有AJAX的請求內容是否也可以用gziap壓縮傳輸?
帶著這些問題在網上查了下資料
AJAX的請求可以通過在http request中增加一個頭標識:accept-encoding,值為"gzip"的方式實現
servlet則可以通過配置一個filter來實現
針對Apache2.0之前的版本,可以通過添加第三方的module_gzip模塊來啟用
針對Apache2.0及之后的版本,可以通過mod_deflate啟動
下面的一個鏈接詳細介紹了apache,tomcat中的配置方法:
http://www.128kj.com/article/article5/DA6B1D7BCDE9DE999C34E7379E18B35A.htm?id=2746
http://blogger.org.cn/blog/more.asp?name=lhwork&id=21867
用tomcat 6的可以到下面的url參考:
http://tomcat.apache.org/tomcat-6.0-doc/config/http.html
在tomcat的server.xml的connector部分,把compression="force"選項加上,然后,就可以用下面的代碼測試,我是在demo應用下放了個md5.js:
/**
* Created at 2008-03-21.
*/
package com.demo.test.http.gzip;
import junit.framework.TestCase;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.GetMethod;
/**
* @author pony
* 如果有任何對代碼的修改,請按下面的格式注明修改的內容.
* 序號 時間 作者 修改內容
* 1. 2008-3-21 pony created this class.
*
*/
public class TestTomcatGzipConfigure extends TestCase {
public void testGetGzipContentFromTomcat() throws Exception {
HttpClient http = new HttpClient();
GetMethod get = new GetMethod("http://192.168.66.128:8080/demo/md5.js");
try {
get.addRequestHeader("accept-encoding", "gzip,deflate");
get.addRequestHeader(
"user-agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Alexa Toolbar; Maxthon 2.0)");
int er = http.executeMethod(get);
if (er == 200) {
System.out.println(get.getResponseContentLength());
String html = get.getResponseBodyAsString();
System.out.println(html);
System.out.println(html.getBytes().length);
}
} finally {
get.releaseConnection();
}
}
}