【问题标题】:Azure Web App Not Using GZip CompressionAzure Web App 不使用 GZip 压缩
【发布时间】:2015-11-30 19:18:42
【问题描述】:

我正在使用 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 应用程序后,我重新运行了测试,但我仍然得到了两个 F。尽管我已将这些设置添加到 web.config,但 Azure Web App 似乎并未支持它们。

另外,我发现一些 Web 应用层不允许压缩,但我在 S2 上运行,并且我验证它确实允许压缩。

任何帮助将不胜感激!

谢谢!

【问题讨论】:

    标签: azure gzip azure-web-app-service http-caching http-compression


    【解决方案1】:

    默认情况下为 Azure Web 应用启用 gzip 压缩。您可以在站点 LocalSiteRoot/Config/applicationhost.config 中查看规则。查看响应标头(可以使用开发人员工具轻松完成)应该确认正在使用 gzip。您的站点加载的资源之一可能未压缩,这会导致 WebPageTest 失败。如果您担心,我会查看网络捕获和响应标头,看看是否可以找到违规资源。

    要转至本地站点根目录,您可以使用 FTP,或通过 https://.scm.azurewebsites.net/DebugConsole 转至您的 SCM 站点,然后单击地球图标。

    我还怀疑您的 2 个 javascript 文件没有被压缩,因为 Content-Type 标头没有被填充,所以规则没有捕获它,因为它无法识别 mimetype。

    【讨论】:

    • 有 2 个文件未压缩发送。两者都是从我的 Azure Web 应用程序提供的 javascript 文件。当我打开开发工具时,如果我查看从 Google CDN 提供的 javascript 文件,它的响应标头为“Content Encoding = gzip”。但是,当我查看我的 Azure Web 应用程序提供的 2 个 javascript 文件时,都没有此响应标头。
    • 如何访问 LocalSiteRoot/Config/applicationhost.config?我在 Azure 门户中单击我的 Web 应用程序,然后单击“所有设置”。我没有看到任何说 LocalSiteRoot 或 config 的内容。
    • 我已经编辑了我的答案以显示如何访问 LocalSiteRoot 并添加了我认为可能存在的问题。
    • Gzip 默认情况下也可以在 IIS 后面的 Kestrel 上运行的新 ASP.NET 5 (dnx) 应用程序上运行。您仍然需要 Kestrel 中的静态文件处理程序,但在返回的途中 IIS 会将其检测为静态内容并 gzip 它们或您在 web.config 中指定的任何内容(也适用于动态内容)
    • 我关注了您的帖子,并尝试在没有任何脚本的情况下压缩一个简单的 html 页面,但我在 azure 中有一个问题,here 是我的问题。
    【解决方案2】:

    只是在这里备份@theadriangreen - 这将是一个标题问题。我发现在 web.config 中添加类型是不可靠的。

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

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

    或者,您可以将 applicationHost.xdt 添加到您的应用程序根目录中,一切顺利。这是一个示例。

    <?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>
    

    参考资料:-

    【讨论】:

      猜你喜欢
      • 2020-08-24
      • 1970-01-01
      • 2015-02-07
      • 1970-01-01
      • 2015-07-14
      • 2012-06-17
      • 2012-09-17
      • 1970-01-01
      • 2015-12-01
      相关资源
      最近更新 更多