Asp.Net Core - 在共享主机环境中启用HttpCompression?

时间:2018-05-24 20:28:02

标签: c# asp.net iis asp.net-core

我正在使用运行ASP.Net Core 2.0 Web应用程序的共享主机。当我在localhost上运行应用程序时,我可以看到HttpCompression工作正常(内容编码:gzip)为JS文件返回响应头)。

部署到共享主机后,内容编码:gzip响应不再存在。我尝试在web.config中添加各种httpCompression / urlCompression设置,但托管公司表示我的计划禁用了这些设置。

是否有其他方法可以使Gzip压缩工作,或者我是否必须使用在IIS中启用它的主机方案?

编辑:我还使用ResponseCompression中间件作为ASP.Net Core的一部分,内容编码响应标头仍然没有出现。配置代码如下:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddLogging();

        services.AddResponseCompression(options =>
        {
            options.Providers.Add<GzipCompressionProvider>();
        });

...
}

        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {        
        if (env.IsDevelopment())
        {
            loggerFactory.AddDebug(LogLevel.Debug);
            app.UseDeveloperExceptionPage();
            app.UseBrowserLink();
        }
        else
        {
            app.UseExceptionHandler("/error");
        }

        app.UseStatusCodePagesWithRedirects("/error/{0}");
        app.UseResponseCompression();

        app.UseStaticFiles(new StaticFileOptions
        {
            OnPrepareResponse = ctx =>
            {
                ctx.Context.Response.Headers.Append("Cache-Control", "public, max-age=604800");
            }
        });

        app.UseAuthentication();

        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "areas",
                template: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
              );

            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });

        var options = new RewriteOptions()
            .AddRedirectToHttps();

        app.UseRewriter(options);
    }

1 个答案:

答案 0 :(得分:1)

使用响应压缩中间件;添加对Microsoft.AspNetCore.ResponseCompression或Microsoft.AspNetCore.All NuGet包的引用。 请参阅docs

通过以下方式设置:

WebHost.CreateDefaultBuilder(args)
    .ConfigureServices(services =>
    {
        services.AddResponseCompression();
    })
    .Configure(app =>
    {
        app.UseResponseCompression();

        // ...
    })
    .Build();

编辑:在下面的评论中,您提到您的网站位于https,这就是默认情况下关闭响应压缩以防止CRIME和BREACH攻击的原因。 您可以通过EnableForHttps选项重新启用它。

services.AddResponseCompression(options =>
{
options.EnableForHttps = true;
options.Providers.Add<GzipCompressionProvider>();
});