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");

例如加過濾器(已經驗證過)

https://www.jianshu.com/p/5cc7d87c19f0


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM