http gzip壓縮功能記錄


版權聲明:本文為博主原創文章,轉載請附上原文出處鏈接。

本文鏈接:https://www.cnblogs.com/shaoshuai95928/articles/Tomcat.html

  最近在springboot項目中遇到一個問題,服務器返回給客戶端的json數據量太大,查詢效率慢,因此需要對返回結果進行壓縮處理,以提高查詢效率。通過資料查詢,目前壓縮功能以HTTP gzip壓縮為常用的壓縮方式,以這種方式配置之后,再次驗證查詢時,壓縮效率達到將近原來的10倍,先記錄Gzip壓縮相關資料說明:

------------------------------------------------------------------------------

  1. HTTP 協議支持GZIP 壓縮機制,也稱協議壓縮。 HTTP GZIP壓縮是由WEB服務器和瀏覽器共同遵守的協議,也就是說WEB服務器和瀏覽器都必須遵守。目前主流的服務器和瀏覽器都支持GZIP壓縮技術。包括 Chrome、IE、FireFox、Opera 等;服務器有 tomcat、Apache 和 IIS 等。

     2. GZIP 主要用來壓縮html,css,javascript,等靜態文本文件,也支持對動態生成的,包括CGI、PHP , JSP , ASP , Servlet,SHTML等輸出的網頁也能進行壓縮。

     3. GZIP 壓縮的比率通常在3~10 倍之間,這樣可以大大節省服務器的網絡帶寬,大大提升瀏覽器的瀏覽速度。

     4. GZIP 是一種數據壓縮格式,默認且目前僅使用deflate算法壓縮data部分;deflate是一種壓縮算法,是huffman編碼的一種加強。

     5. 協議壓縮就是依據HTTP協議進行壓縮,不需要程序員進行壓縮,解壓編碼,而是把壓縮過程交給WEB服務器,將解壓過程交給客戶端。 如果客戶端為支持GZIP壓縮的瀏覽器,那么解壓過程也不需要程序員參與,瀏覽器會按照一定的規則自動進行解壓縮;如果客戶端為HttpClient ,那么就需要手動進行GZIP解碼了。

     6. 壓縮過程:客戶端發送http請求,如果請求頭header中攜帶Accept-Encoding: gzip,deflate (現在的瀏覽器一般默認都是這樣),那么瀏覽器的意思是:服務器需要進行GZIP壓縮,再看響應內容的類型是否滿足服務器配置的需要壓縮的類型,如果符合,那么WEB服務器在傳輸響應內容之前,會對響應內容進行壓縮,並在響應頭中添加Content-Encoding gzip;如果不符合,那么將不壓縮,直接返回。

     7. 解壓過程:(瀏覽器)客戶端接收到響應,如果響應頭中包含Content-Encoding GZIP,那么瀏覽器會自動將響應內容進行GZIP解壓縮,然后再呈現在頁面上。如果不包含,那么將直接呈現在頁面上。 

------------------------------------------------------------------------------

以下就是開啟http gzip壓縮功能步驟總結:

1、引入jar包,用於屏蔽springboot中的Tomcat

<!-- 去除內嵌tomcat -->
      <exclusions>
        <exclusion>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
      </exclusions>
    </dependency>

2、啟動類繼承SpringBootServletInitializer,重寫configure方法

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return super.configure(builder);
    }

3、配置Tomcat服務器配置文件,在server.xml中進行開啟壓縮功能

<Connector port="8080" protocol="HTTP/1.1"
  connectionTimeout="20000"
  redirectPort="8443" 
executor="tomcatThreadPool"
URIEncoding="UTF-8"
compression="on"
compressionMinSize="2048"
noCompressionUserAgents="gozilla,traviata"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,application/json"
/>

  參數說明:

  executor:配置線程池
  URIEncoding:請求編碼方式
  compression:開啟壓縮
  compressionMinSize:指大於2048B(2kb)壓縮才生效,默認是2048B
  noCompressionUserAgents:指哪些客戶端發出的請求不壓縮
  compressableMimeType:被壓縮的Mime類型列表,支持html、xml、js、css、json等文件格式的壓縮

4、將項目打成war包放在Tomcat/webapps目錄下

注意訪問時,需在端口后面加上項目名,而且SpringBoot項目的application.properties/application.yml中配置的端口將不生效,以啟動的Tomcat中的端口進行訪問。


免責聲明!

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



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