11

是否有人使用其托管的 Web 角色成功配置了 Azure CDN 以进行 HTTP 压缩?我们在 Azure 边缘服务器上压缩 HTTP 内容时遇到问题。CDN 仅缓存内容的未压缩版本。

如果我们从非 Azure 方法中点击我们的资源链接 ( webresource.axd ),它会按预期通过 gzip (使用xxxx.cloudapp.net/cdn/webresource.axd )进行压缩。但是,只要我们将资源链接指向 Azure CDN ( xxxx.vo.msecnd.net ),尽管浏览器告诉 Azure CDN 它接受 gzip,内容仍会以未压缩的形式提供。

在 Azure 论坛上发布了同样的问题,但目前还没有人回复。

在对问题进行故障排除时,Azure CDN 似乎正在剥离Accept-Encoding HTTP 标头。只是好奇其他人是否有同样的问题。

Azure CDN 最佳实践指出...

Windows Azure CDN 如何处理压缩内容?

Windows Azure CDN 不会修改(或添加)对您的对象的压缩。Windows Azure CDN 尊重源基于“Accept-Encoding”标头提供的任何压缩。从 1.4 开始,Azure 存储不支持压缩。如果您使用托管服务对象交付,则可以将 IIS 配置为返回压缩对象。

我们看到的是 CDN 不尊重来源Accept-Encoding,它被剥离了。

4

3 回答 3

13

通过反复试验发现,Azure CDN 有一个当前限制,即它不会传递Accept-Encoding HTTP 标头,除非它找到包含可压缩文件名类型(.js、.cs)的 QueryString 参数,或者您正在请求文件按其原始名称(jquery.js、site.css 等)。

这意味着如果您使用的是AXD 资源处理程序WebResource.axd 等),则不会执行 HTTP 压缩。如果您将 QueryString 参数附加到一个或扩展名,Azure CDN 只会传递Accept-Encoding 。.cs.js

我们正在使用自定义的 AXD 资源处理程序,所以这对我们来说很容易实现。我们刚刚申请&group=core.js&group=core.css我们的组合缩小资源,并且压缩按预期工作。不幸的是,当前的Azure CDN 文档中不存在这种情况。

简而言之,我们必须从这个转换我们的 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)。

于 2012-05-03T15:19:59.440 回答
4

CDN 从源头获取压缩,Windows Azure 存储不直接支持压缩,因此如果您从 Azure 存储源获取 CDN 内容,它不会被压缩。因此,如果您将内容托管在 Windows Azure 存储中,您将无法拥有压缩内容。要拥有压缩内容,您需要将内容托管在托管服务中,例如作为源的 Web 角色。由于这种类型的来源将基于 IIS,因此是一种使用压缩的受支持方式。

Windows Azure CDN 支持 HTTP1.0 上的压缩内容,而且我看到的大多数问题都与 HTTP 1.0 与 HTTP 1.1 的问题有关。因此,当您通过 HTTP 1.0(使用 wget 命令)直接从您的 Web 角色请求您的 CDN 对象时,如果一切正确,您应该获得压缩内容。如果您获得未压缩的内容,那么您就知道问题出在哪里。请确保您已将应用程序和 IIS 本身配置为向 HTTP 1.0 客户端和 HTTP 1.1 客户端提供压缩内容。

我写了一篇详细的博客文章,通过 Web 角色使用 Azure CDN 准确添加 HTTP 压缩:

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

于 2012-05-02T19:08:35.860 回答
3

这些关于添加 .css/.js 扩展的答案似乎不再适用于最近(2014 年第一季度)更新的 Azure CDN 服务后端。

我今天用一个新的云服务 Web 角色项目和一个新的 CDN 实例运行了一个隔离测试。

我在我的网络角色(单个实例)中放置了一个 /cdn/style-1.css 文件并通过 CDN 访问它。它没有被压缩。直接访问 WAS 压缩。

我的 Web 角色服务 gzip 内容的修复是确保 IIS 配置选项 noCompressionForProxies 为“false”(默认为 true)。

这使得 Azure CDN 然后将 gzip 内容发送给我。

附加 css/js 扩展没有任何区别。

请注意,在测试此更改时,它是主机配置更改,因此您必须通过 IIS 管理器(而不是 iisreset)重新启动 IIS 才能使其生效。最后,要测试更改,请务必创建一个新文件(例如 style-2.css)并通过 CDN 请求它,以便再次从源服务器获取它。

于 2014-06-18T03:30:30.263 回答