相关连笔记请点击《Tomcat配置Gzip无效》
配置原因:
1.最近使用百度工具进行网站速度诊断时发现网站速度评分不是很理想,而网站速度对粉丝们的体验影响是非常直接的,故有了此文的优化配置。
当然这个只是一个优化点:其他优化点,以后陆续会添加上来,尽情关注,有其他需求的也可以留言。
实际操作:
步奏一(配置):找到tomcat的server.xml文件,找到其中Connector节点然后进行配置修改,具体配置如下
1
2
3
4
5
6
7
|
<
span
style
=
"font-family:SimSun;"
><
Connector
port
=
"80"
protocol
=
"HTTP/1.1"
connectionTimeout
=
"20000"
redirectPort
=
"8443"
URIEncoding
=
"UTF-8"
maxPostSize
=
"0"
useBodyEncodingForURI
=
"true"
compression
=
"on"
compressionMinSize
=
"2048"
noCompressionUserAgents
=
"gozilla, traviata"
compressableMimeType
=
"text/html,text/xml,application/javascript,text/css,text/plain,image/jpeg,application/json"
/></
span
>
|
1
2
3
4
5
6
|
<
span
style
=
"font-family:SimSun;"
>参数说明:
compression="on" 打开压缩功能
compressionMinSize="2048" 启用压缩的输出内容大小,当被压缩对象的大小>=该值时才会被压缩,这里面默认为2KB
noCompressionUserAgents="gozilla, traviata" 对于以下的浏览器,不启用压缩
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" 压缩类型
注意: tomcat7以后,js文件的mimetype类型变为了application/javascript,<
span
style
=
"color:#ff0000;"
>而在tomcat7以下则为text</
span
></
span
><
span
style
=
"color:#ff0000;line-height: 1.5em; white-space: pre-wrap; font-family: SimSun;"
>/javascript</
span
><
span
style
=
"color: rgb(51, 51, 51); line-height: 1.5em; white-space: pre-wrap; font-family: SimSun;"
>;具体的tomcat7定义的类型可以在:conf/web.xml文件中找到。</
span
>
|
1
|
<
span
style
=
"font-family:SimSun;"
>可以在web.xml下搜索,如我搜索javascript会找到如下代码</
span
>
|
1
2
3
4
|
<
span
style
=
"font-family:SimSun;"
></
span
><
pre
class
=
"brush:html;"
><
span
style
=
"font-family:SimSun;"
> <
mime-mapping
>
<
extension
>js</
extension
>
<
mime-type
><
span
style
=
"color:#ff0000;"
>application/javascript</
span
></
mime-type
>
</
mime-mapping
></
span
></
pre
>
|
步奏二(测试):
使用apache HttpClient访问该tomcat加载项目中的一个静态资源(比如一个js文件),然后打印请求的资源内容 或 资源ContentLength,
如果打印的资源内容为乱码 或 ContentLength为 -1,则说明gzip生效了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
public
static
void
main(String[] args)
{
HttpClient httpClient =
new
DefaultHttpClient();
HttpGet get =
new
HttpGet(uri);
ResponseHandler<String> responseHandler =
new
BasicResponseHandler();
try
{
// 设置模拟头部
get.setHeader(
"Accept-Encoding"
,
"gzip,deflate"
);
get.setHeader(
"User-Agent"
,
"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36"
);
String content = httpClient.execute(get, responseHandler);
System.out.println(content);
// 如果gzip生效,这里会打印出乱码;否则会打印出jquery.js的内容
/*
HttpResponse response = httpClient.execute(get);
long cLen = response.getEntity().getContentLength();
System.out.println(cLen); // 如果gzip生效,这里打印的长度值将会是 -1 或一个比原始文件大小小很多的值
*/
}
catch
(Exception e) {
// ignore ...
}
finally
{
httpClient.getConnectionManager().shutdown();
}
}
|
下图是配置前的效果图
下图是配置后的效果图
通过上面的截图可以明显的看出,很多之前没压缩的文件都经过压缩了。但是bootstrap.min.css等个别css文件不知道为什么有没有起作用,
如果有知情的烦请在评论中告知下,如果我后续找到原因了我也将更新此博文。
注明:针对以上存在的bootstrap.min.css等文件未压缩的问题目前以前找到原因了具体请查看笔记
原因是tomcat启动了nio屏蔽了gzip功能,可以通过添加参数useSendfile="false"来强行启动gzip。
以下附上效果图。