tomcat设置gzip
使用tomcat发布3dtiles或terrain数据遇到的gzip问题
问题一
对大于1KB小于48KB的json请求进行gzip压缩,json为原文件(对于大于48KB使用sendfile)
1.创建原始文件
2.设置
在apache-tomcat-8.5.9/conf/server.xml文件中,修改节点如下:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="200000" redirectPort="8443" compression="on" compressionMinSize="1024" compressableMimeType="application/json"
/>
3.参数说明
compression="on" 开启压缩
compressionMinSize="1024"大于1KB的文件才进行压缩
compressableMimeType="application/json",多个类型用","分隔,MIME类型(Content-Type)列表,例如:application/json。
useSendfile属性默认为true,当数据大小达到48kb时,将启用文件传输(sendfile),所以我们想要压缩超过48kb的数据时必须将useSendfile设置为false。(有同学按照我的博客设置,是因为文件大于48KB并且没有关闭sendfile)
4.确定MIME类型
方法一:MIM在apache-tomcat-8.5.9/conf/web.xml有一个设置列表,可以将对应文件后缀名添加MIME类型,
例如:下面配置将请求json后缀名文件的url都添加Content-Type=application/json
<mime-mapping> <extension>json</extension> <mime-type>application/json</mime-type> </mime-mapping>
方法二:
若是不想找文件后缀名与MIME类型的对应关系,直接查看请求即可
5.确定是否gzip压缩
在浏览器输入http://localhost:8080/test-gzip/tileset.json
5.1在response headers里有Content-Encoding:gzip(告诉浏览器需要gzip解压),只要有这个head就意味着tomcat设置的gzip压缩生效了
5.2查看文件内容,用于判断是否gzip压缩是错误的,例如下图
上图数据和原始数据一样,可能会误以为获取到的json没有用gzip压缩,其实是浏览器已经解压过数据,所以你看到的数据与原始数据是一样的。
可以通过比较文件大小判断是否gzip压缩
问题二
对大于1KB小于48KB的.terrain后缀文件请求,进行gzip压缩。
1.设置
1.1在apache-tomcat-8.5.9/conf/web.xml,增加映射关系
<mime-mapping> <extension>terrain</extension> <mime-type>application/octet-stream</mime-type> </mime-mapping>
1.2在apache-tomcat-8.5.9/conf/server.xml文件中,修改节点如下:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="200000" redirectPort="8443" compression="on" compressionMinSize="1024" compressableMimeType="application/octet-stream"/>
2.测试
在浏览器输入http://localhost:8080/test-gzip/0.terrain
延申:
使用cesiumlab生成已经经过gzip压缩过的地形,就没办法通过设置tomcat的gzip了,因为tomcat会再次压缩一次(相当于压缩两次)。只能设置response headers标识
例如java代码里加入
response.setHeader("Content-Encoding", "gzip");
例如加过滤器(已经验证过)
posted on 2019-10-24 20:04 SmilingEye 阅读(2016) 评论(0) 编辑 收藏 举报