ASP.NET MVC包Gzip压缩无法正常工作

4

我的Bundle配置如下:

public class BaseBundleConfig
{
    public static void RegisterBundles(BundleCollection bundles)
    {
        bundles.Add(new ScriptBundle("~/bundles/Models").IncludeDirectory("~/Scripts/models/", "*.js", true));

        bundles.Add(new ScriptBundle("~/bundles/framework").Include(
                                            "~/Scripts/framework/frameworkmodels.js",
                                            "~/Scripts/framework/appbase.js",
                                            "~/Scripts/framework/directives/directives.js",
                                            "~/Scripts/framework/services/Services.js",
                                            "~/Scripts/framework/controllers/controllers.js",
                                            "~/Scripts/framework/filter/filters.js",
                                            "~/Scripts/app/filter/customFilters.js"
                                            ).Include("~/Scripts/app.js"));


        bundles.Add(new StyleBundle("~/Content/css").Include(
                                        "~/Content/libs/bootstrap/bootstrap.min.css",
                                        "~/Content/libs/bootstrap/bootstrap-theme.min.css",                                     
                                        "~/Content/libs/bootstrap/angular-csp.css",
                                        "~/Content/libs/bootstrap/mainStyle.css"
                                        ));

        BundleTable.EnableOptimizations = true;

    }
}

我在 index.cshtml 文件中使用 bundle,代码如下:

......
@System.Web.Optimization.Scripts.Render("~/bundles/framework")

.....
@System.Web.Optimization.Styles.Render("~/Content/css")

在IIS 8.5上发布后,捆绑和缩小的工作如预期所示,但ScriptBundle和StyleBundle两者都未压缩。响应内容类型始终为text/javascript或text/css。为什么gzip压缩不起作用? 在web.config中动态和静态内容压缩都设置为true。
<system.webServer>

    <urlCompression doStaticCompression="true" doDynamicCompression="true" />
</system.webServer>

MVC程序集的版本有: System.Web.Mvc 5.2.3.0 System.Web.Optimization 1.1.0 并且动态压缩模块也已安装在服务器上。
新信息: 两个截图,第一个是IIS请求跟踪日志,显示动态压缩模块正在工作;第二个是Chrome网络选项卡响应头,为什么传输编码方式是chunked而响应不是gzip呢?
谢谢你的意见。

1
仅适用于IIS 7.5但可能有所帮助 - https://dev59.com/K2w05IYBdhLWcg3w72M0 - James P
2个回答

2

我找到了问题所在,是客户端和IIS之间的硬件防火墙解压缩gzip数据并处理内容后,以分块方式发送给客户端。当我从公司外部的其他客户端尝试时,gzip压缩像我期望的那样工作。


1
经过3个小时的服务器调试,问题终于得到解决。有没有什么办法可以克服这个问题? - PotatoJam

2

<urlCompression>之前或之后,在您的web.config中添加一个<httpCompression>部分。这是我的示例:

<httpCompression directory="%SystemDrive%\websites\_compressed" minFileSizeForComp="1024">
    <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" />
    <dynamicTypes>               
        <add mimeType="text/*" enabled="true" />
        <add mimeType="message/*" enabled="true" />
        <add mimeType="application/javascript" enabled="true" />
        <add mimeType="application/x-javascript" enabled="true" />
        <add mimeType="application/json" enabled="true" />
        <add mimeType="*/*" enabled="false" />
    </dynamicTypes>
    <staticTypes>
        <add mimeType="text/*" enabled="true" />
        <add mimeType="message/*" enabled="true" />
        <add mimeType="application/javascript" enabled="true" />
        <add mimeType="application/x-javascript" enabled="true" />
        <add mimeType="application/json" enabled="true" />
        <add mimeType="*/*" enabled="false" />
    </staticTypes>
</httpCompression>

请注意,只有当捆绑包达到1024字节或更大(minFileSizeForComp)时才会生效,因此您不需要浪费时间压缩已经非常小的文件。
还要注意确保gzip.dll在此文件夹中。

刚刚添加了配置但没有成功。 - hvojdani
1
很抱歉,那个方法不起作用。你是否已经按照詹姆斯提供的链接中的所有故障排除步骤进行了操作?有很多因素可能会导致gzip无法像您期望的那样工作。https://dev59.com/K2w05IYBdhLWcg3w72M0 - Joe Wilson

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