开发者社区> 问答> 正文

CDN的智能压缩分析


问题描述:  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;






这样源站就可以正常的响应Gzip压缩后的内容了:





4、 源站开启Gzip,CDN控制台同时开启“智能压缩”开关,不会影响网站的正常访问,也不会影响到Gzip压缩功能。


5、 控制台“智能压缩”生效的条件


a)源站的响应的内容大小要超过1024B


b) content-type:
text/xml
text/plain
text/css
application/javascript
application/x-javascript
application/rss+xml
text/javascript
image/tiff
image/svg+xml
application/json




c)      客户端不是IE6浏览器

展开
收起
云栖徒骇 2016-04-19 11:28:17 9400 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
构建智能化的视频系统 阿里云CDN的进化 立即下载
CDN数据化实践 立即下载
直播CDN-X - 白山直播CDN流传递链路优化 立即下载