Azure Web应用程序未使用GZip压缩

7

我使用了WebPageTest测试我的Azure Web应用的性能(ASP.Net vNext Web API / Angular)。我在“压缩传输”和“缓存静态内容”两方面均得到了F级评分。

在查看了StackOverflow和Google后,我在web.config文件中添加了以下内容:

<urlCompression doStaticCompression="true" doDynamicCompression="true" />
    <httpCompression>
      <dynamicTypes>
        <clear />
        <remove mimeType="*/*" />
        <add enabled="true" mimeType="text/*"/>
        <add enabled="true" mimeType="message/*"/>
        <add enabled="true" mimeType="application/x-javascript"/>
        <add enabled="true" mimeType="application/javascript"/>
        <add enabled="true" mimeType="application/json"/>
        <add enabled="false" mimeType="*/*"/>
        <add enabled="true" mimeType="application/atom+xml"/>
        <add enabled="true" mimeType="application/atom+xml;charset=utf-8"/>
      </dynamicTypes>
      <staticTypes>
        <clear />
        <remove mimeType="*/*" />
        <add enabled="true" mimeType="text/*"/>
        <add enabled="true" mimeType="message/*"/>
        <add enabled="true" mimeType="application/javascript"/>
        <add enabled="true" mimeType="application/atom+xml"/>
        <add enabled="true" mimeType="application/xaml+xml"/>
        <add enabled="true" mimeType="application/json"/>
        <add enabled="false" mimeType="*/*"/>
      </staticTypes>
    </httpCompression>

并且

<staticContent>
      <!-- Set expire headers to 30 days for static content-->
      <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="30.00:00:00" />
</staticContent>

在重新部署我的Web应用程序后,我重新运行了测试,但两个测试仍然失败。尽管我已经将这些设置添加到web.config中,但似乎Azure Web应用程序并没有遵守它们。

此外,我发现有些Web应用程序层不允许压缩,但我正在S2上运行,并验证了它确实允许压缩。

非常感谢您的帮助!

谢谢!

2个回答

12

Azure Web Apps默认启用gzip压缩。您可以在网站的LocalSiteRoot/Config/applicationhost.config中查看规则。查看响应头(可以使用开发人员工具轻松完成)应该可以确认正在使用gzip。您的网站加载的资源中可能有一个未经压缩,这会导致WebPageTest失败。如果您担心,我建议查看网络捕获和响应头,并找出有问题的资源。

要进入本地站点根目录,您可以使用FTP,或者转到https://.scm.azurewebsites.net/DebugConsole上的SCM站点,然后单击全球图标。 输入图像描述

此外,我怀疑您的两个JavaScript文件没有被压缩,因为Content-Type头未得到填充,因此该规则无法捕获它,因为它无法识别mime类型。


有2个文件没有被压缩发送。这两个文件是从我的Azure Web应用程序提供的javascript文件。当我打开开发工具时,如果我查看从Google CDN提供的javascript文件,它具有“Content Encoding = gzip”的响应头。然而,当我查看由我的Azure Web应用程序提供的2个javascript文件时,两者都没有此响应头。 - jkruer01
我如何访问LocalSiteRoot/Config/applicationhost.config?我在Azure门户中单击我的Web应用程序,然后单击“所有设置”。我没有看到任何关于LocalSiteRoot或config的内容。 - jkruer01
我已经编辑了我的答案,展示如何访问LocalSiteRoot,并添加了我认为存在的问题。 - theadriangreen
默认情况下,即使在运行在IIS后面的Kestrel上的新ASP.NET 5(dnx)应用程序中,Gzip也将正常工作。您仍然需要在Kestrel中使用静态文件处理程序,但在返回时,IIS将检测它们为静态内容并对其进行gzip或web.config中指定的任何其他操作(也适用于动态内容)。 - Ilya Chernomordik
我按照您的帖子尝试压缩一个简单的html页面,没有任何脚本,但我在Azure上遇到了问题,这里是我的问题。 - Shaiju T

8

仅为支持 @theadriangreen 的论点-这将是一个标题问题。我发现在web.config中添加类型不可靠。

相反,您需要编辑存储在Azure最深部的applicationHost.config文件。最简单的方法是在Azure门户或Kudu中安装IIS管理器扩展程序。可以通过.scm.azurewebsites.net访问Kudu。

在那里,您可以编辑文件,它将为您保存一个xdt-一旦重新启动应用程序,您应该发现xdt被应用。

或者,您只需将applicationHost.xdt添加到App根目录即可。以下是一个示例。

<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <system.webServer>
    <httpCompression>
      <dynamicTypes>
        <add mimeType="application/json;charset=utf-8" enabled="true" xdt:Transform="InsertAfter(/configuration/system.webServer/httpCompression/dynamicTypes/add[(@mimeType='application/json')])" />
      </dynamicTypes>
    </httpCompression>
  </system.webServer>
</configuration>

References:-


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接