Azure CDN - 启用HTTP压缩 - 托管Web角色

时间:2012-05-02 19:00:30

标签: azure cdn azure-web-roles azure-cdn

有没有人成功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不尊重原点接受编码,它被剥夺了。

3 个答案:

答案 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完全相同:

http://blogs.msdn.com/b/avkashchauhan/archive/2012/03/05/enableing-gzip-compression-with-windows-azure-cdn-through-web-role.aspx

答案 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请求它,以便它再次从源服务器获取它。