有没有人成功configured Azure CDN for HTTP compression使用他们的托管网络角色?我们在Azure边缘服务器上压缩HTTP内容时遇到问题。 CDN仅缓存内容的未压缩版本。
如果我们从非Azure方法访问我们的资源链接( webresource.axd ),它将通过gzip压缩(使用xxxx.cloudapp.net/cdn/webresource.axd)如预期的那样。但是,只要我们将资源链接指向Azure CDN( xxxx.vo.msecnd.net ),即使浏览器告知Azure CDN它接受gzip,内容也会以未压缩的方式提供。
我posted this same issue to Azure Forums,但到目前为止还没有人回复。
在解决问题时,似乎Azure CDN正在剥离 Accept-Encoding HTTP标头。只是好奇其他人是否也遇到过同样的问题。
Azure CDN Best Practices states...
Windows Azure CDN如何使用压缩内容?
Windows Azure CDN不会修改(或添加)对象的压缩。 Windows Azure CDN遵循基于“Accept-Encoding”标头的原始提供的压缩。从1.4开始,Azure存储不支持压缩。如果使用托管服务对象传递,则可以将IIS配置为返回压缩对象。
我们看到的是CDN不尊重原点接受编码,它被剥夺了。
答案 0 :(得分:12)
通过试验和错误发现Azure CDN具有当前限制,它不会通过 Accept-Encoding HTTP标头,除非它找到包含可压缩文件名类型的QueryString参数( .js,.cs )或者您按原始名称( jquery.js,site.css等)请求文件。
这意味着如果您使用AXD resource handler( WebResource.axd等),则不会执行HTTP压缩。如果您附加带有.cs
或.js
扩展名的QueryString参数,Azure CDN将仅传递接受编码。
我们正在使用自定义AXD资源处理程序,因此我们很容易实现。我们刚刚为合并的缩小资源应用了&group=core.js
和&group=core.css
,并且压缩按预期工作。不幸的是,目前Azure CDN documentation中不存在这种情况。
简而言之,我们必须从此转换URI:
https://xxxx.vo.msecnd.net/resourceManager.axd?token=HL80vX5hf3lIAAA
到此:
https://xxxx.vo.msecnd.net/resourceManager.axd?token=HL80vX5hf3lIAAA&group=core.js
Azure CDN在查询字符串中看到.js
后,将返回资源的压缩版本。
希望这可以帮助其他人使用通过Azure CDN提供的Web资源(AXD)。
答案 1 :(得分:4)
CDN从源中获取压缩,而Windows Azure存储不直接支持压缩,因此如果从Azure存储源获取CDN内容,则不会对其进行压缩。因此,如果您在Windows Azure存储中托管内容,则无法获得压缩内容。要拥有压缩内容,您需要在托管服务中托管内容,例如Web角色作为源。由于这种类型的源是基于IIS的,因此支持使用压缩的方式。
Windows Azure CDN支持HTTP1.0上的压缩内容,大多数情况下我遇到的问题都与HTTP 1.0与HTTP 1.1问题有关。因此,当您通过HTTP 1.0直接从Web角色请求CDN对象(使用wget命令)时,如果一切正确,您应该获得压缩内容。如果您获得非压缩内容,那么您就知道问题所在。请确保您已将应用程序和IIS本身配置为向HTTP 1.0客户端以及HTTP 1.1客户端提供压缩内容。
我编写了一篇详细的博客文章,通过Web角色将Azure压缩与Azure CDN完全相同:
答案 2 :(得分:2)
关于添加.css / .js扩展名的这些答案似乎不再适用于最近(2014年第一季度)更新的Azure CDN服务后端。
我今天使用新的Cloud Service Web角色项目和新的CDN实例运行了一个独立的测试。
我在我的web角色(单个实例)中放置了一个/cdn/style-1.css文件,并通过CDN访问它。它没有被压缩。直接访问WAS压缩。
我的Web角色服务gzip内容的修复是为了确保IIS配置选项noCompressionForProxies为“false”(默认为true)。
这使Azure CDN向我发送了gzip内容。
追加css / js扩展没有任何区别。
请注意,在测试此更改时,它是主机配置更改,因此您必须通过IIS管理器(而不是iisreset)重新启动IIS才能使其生效。最后,为了测试更改,请务必创建一个新文件(例如,style-2.css)并通过CDN请求它,以便它再次从源服务器获取它。