今天在路上偶尔想到,既然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();
}
}
}