问题描述: CDN的智能压缩分析
解决过程:
1、 如果源站开启了Gzip开关,是不需要在CDN的控制台上再开启“智能压缩”功能的。
源站开启Gzip,CDN控制台关闭“智能压缩”时的情况:
从上图可以看到,当客户端请求带有Gzip时,是可以返回Gzip压缩后的内容的。所以源站开启了Gzip,就不需要在控制台再开启“智能压缩”开关了。
当客户端请求没有Gzip时,没有命中缓存(Miss)的,说明CDN节点上还会缓存一份没有经过压缩的内容,也就是同时缓存一份压缩过,一份没有压缩过的两份内容。
此时,CDN会根据客户端的请求是否带有Gzip来返回不同的缓存内容。
由于现在的浏览器在请求时都会带上Accept-Encoding:gzip, deflate, sdch 的请求头,所以源站响应的基本都是压缩后的内容,可以减少源站的带宽压力。
2、 如果源站没有开启Gzip开关,才需要在CDN控制台上开启“智能压缩”功能。但是不推荐这种方式,还是推荐客户使用“在源站开启Gzip的方式,CDN控制台上不必开启“智能压缩”功能”。
源站关闭Gzip开关,CDN控制台开启“智能压缩”:
从上图的上半部分,可以看到当客户端请求带有Gzip时,是可以返回Gzip压缩后的内容的。
但是,从上图的下半部分可以看到,当客户端请求没有Gzip时,也是命中缓存(Hit)的,说明CDN节点上只缓存了一份没有经过压缩的内容。
与CDN的研发核实,这种情况下,CDN上只有没有压缩的内容,当客户端请求带有Gzip时,每次请求,CDN节点都需要进行一次压缩计算,对CDN节点的性能有很大影响。
同时这种情况下CDN回源时,源站吐出的是没有压缩过的内容,对源站的带宽压力也比较大。
3、 有时源站开启了Gzip开关,但是当客户端请求带有Gzip时,没有返回Gzip压缩后的内容。
比如下图这种情况:
这种情况,一般是由于CDN在回源时,请求中会带有Via的header,有些WEB服务无法正确的处理这个header,导致没有响应压缩后的内容:
上图中可以看到,请求中带有Via头后,源站返回的内容已经没有Gzip压缩了。
针对这种情况,需要在源站进行配置,以Nginx为例,需要添加如下配置:
gzip_proxied any;
text/xml
text/plain
text/css
application/javascript
application/x-javascript
application/rss+xml
text/javascript
image/tiff
image/svg+xml
application/json
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。