在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