在http的協議裏,爲了減小網絡傳輸,容許將報文進行gzip壓縮之後再傳輸。雖然網絡傳輸體積減少了,可是服務器壓縮和瀏覽器的解壓縮消耗了CPU的計算。javascript
後來出現了預壓縮技術,就是提早把靜態文件進行gzip壓縮,當請求來的時候,直接讀走。這樣服務器就沒了壓縮消耗,而瀏覽器的解壓縮性能相比網絡IO,影響不大。css
每次請求來的時候,要實時進行壓縮。可是有個問題,就是壓縮過的文件,要重複壓縮,這樣後面的靜態壓縮就派上用場了。html
1.靜態文件壓縮前端
每次請求靜態文件的時候,都會動態壓縮靜態文件。java
2.反向代理壓縮jquery
反向代理返回的報文,也是能夠壓縮的。但也是每次動態壓縮。能夠根據頭信息處理linux
3.代理緩存壓縮,瀏覽器緩存nginx
在作反向代理的時候,能夠緩存應用服務器返回的報文,支持緩存首部Cache-Control等。緩存的文件爲明文。可是反向代理和壓縮緩存,能夠分層來解決。反向代理服務器動態壓縮,而CDN直接緩存結果(壓縮與非壓縮)。至關於加了2層代理來處理。 對於瀏覽器,開啓Expire首部,則瀏覽器能夠緩存壓縮後的結果,減小服務器請求。web
4.代理的vary首部壓縮apache
其實cdn,代理服務器,原理上都是代理服務器。他們通常以url爲key值進行緩存。而vary屬性的設置,告訴了代理根據url緩存的同時,vary的信息也做爲key。好比客戶端(瀏覽器)請求的信息裏帶上了Accept-Encoding:gzip 則返回壓縮副本。若是沒有帶這個頭信息,默認返回非壓縮副本。
對於靜態文件先壓縮再輸出是再正常不過的事了,可是這種壓縮都是動態的,在每次請求都會先壓縮再輸出,大大浪費了不少cpu。若是前端加了反向代理緩存,那能減小這種浪費。但不是每一個生產環境前端都有緩存的。而nginx有個模塊Gzip Precompression,這個模塊的做用是對於須要壓縮的文件,直接讀取已經壓縮好的文件(文件名爲加.gz),而不是動態壓縮,對於不支持gzip的請求則讀取原文件。 ./configure --prefix=/opt/nginx/nginx-1.9.6 --with-http_gzip_static_module
驗證方法也很簡單。能夠自行壓縮不一樣大小的×.gz文件,經過瀏覽器調試工具查看返回的文件大小便可。 壓縮命令 gzip -c -9 jquery-1.11.2.min.js > jquery-1.11.2.min.js.gz 原始文件:284k 代碼混淆,代碼壓縮:95k gzip壓縮:33k 能夠看到,284k的jquery文件,通過處理之後,變成了33k。
壓縮有瀏覽器查看
完整配置文件請參考附件
如下三條命令,均可以附加上Accept-Encoding首部,來獲取壓縮與非壓縮的服務器報文
apache-bench ./ab -n 100000 -c 16 -H 'Accept-Encoding: gzip' 'http://192.168.56.2:8080/cache_ehcache-2.10.0_web/ex^Cre' wget 其中wget是以http/1.0請求的,這個要注意gizp裏開啓1.0的壓縮,默認是不開啓的 wget --header=Accept-Encoding:gzip --save-headers -d http://192.168.56.2:8080/cache_ehcache-2.10.0_web/expire curl curl -v -H "Accept-Encoding:gzip" http://192.168.56.2:8080/cache_ehcache-2.10.0_web/expire
nginx 預壓縮(gzip)靜態文件 http://willko.iteye.com/blog/667091
Nginx中gzip_static模塊的使用 http://inosin.iteye.com/blog/1299705
Nginx 開啓Gzip壓縮的方法(很是的詳解) http://www.111cn.net/sys/nginx/69492.htm
Nginx Gzip模塊啓用和配置指令詳解 http://www.jb51.net/article/48995.htm
linux下gzip的壓縮詳解 http://booby325.iteye.com/blog/1685855
加速nginx: 開啓gzip和緩存 http://www.darrenfang.com/2015/01/setting-up-http-cache-and-gzip-with-nginx/
配置vary http://www.webkaka.com/blog/archives/how-to-set-Vary-Accept-Encoding-header.html