生產環境上因爲帶寬是貴重的資源,尤其對於小商家來說,如果對於請求不進行壓縮,就是白白浪費帶寬,不僅浪費錢,還可能影響別的正常業務。所以上生產環境前要簡要是否開啓了gzipo壓縮。
假設接口沒有壓縮前,返回的包長是1454.
判斷接口使用使用gzip壓縮,通常主流的壓縮是gzip
命令行方式, 使用萬能的curl命令
curl -I -H "Accept-Encoding: gzip,deflate" http://127.0.0.1/user/get-no-compress
返回如下:
HTTP/1.1 200
Server: nginx/1.17.3
Date: Thu, 21 May 2020 08:07:04 GMT
Content-Type: application/json;charset=UTF-8
Connection: keep-alive
Vary: Accept-Encoding
Content-Encoding: gzip
這裏字段Content-Encoding
顯示gzip
就表示已經使用壓縮。
也可以通過瀏覽器,觀察接口
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-v2gcwSey-1590051896616)(https://pic-1251286439.cos.ap-guangzhou.myqcloud.com/input/20200521161112.png)]
那麼如何是指壓縮,目前主流部署方式是nginx+spring服務,通過nginx提供反向代理以及waf功能,通過spring來實現業務代碼。
nginx跟spring都提供gzip的壓縮方法
nginx 配置打開 gzip
# gzip壓縮功能設置
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_comp_level 2;
gzip_types text/html text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml;
- gzip_comp_level #壓縮級別1-9 數字越大,壓縮比越大,耗時越高,建議使用2
- gzip_min_length #內容超過多少就啓用壓縮
- gzip_buffers #壓縮使用buffer,照着配就行了
- gzip_types #返回類型支持壓縮列表,如果沒有使用的gzip就看下是否沒有添加進去。
spring 配置打開 gzip
server:
compression:
enabled: true
mime-types: text/html,text/xml,text/plain,text/css,text/javascript,application/javascript,application/json
min-response-size: 1024
這裏注意,如果spring跟nginx都配置了gzip相當於壓縮了兩次。