我正在使用运行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);
}
答案 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>();
});