在 .NET Core 5.0 中启用 Gzip 压缩 Response
在 .NET Core 5.0 (ASP.NET Core 5.0) 中启用 Gzip 压缩主要通过响应压缩中间件实现。以下是详细配置步骤:
1. 安装必要的 NuGet 包
首先确保已安装响应压缩包:
bash
dotnet add package Microsoft.AspNetCore.ResponseCompression
2. 在 Startup.cs 中配置
ConfigureServices 方法中添加服务:
csharp
public void ConfigureServices(IServiceCollection services)
{
添加响应压缩服务
services.AddResponseCompression(options =
{
options.EnableForHttps = true; 如果需要为HTTPS启用压缩
options.Providers.AddGzipCompressionProvider();
添加需要压缩的MIME类型(默认包含textcss、applicationjavascript等)
options.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat(new[]
{
applicationjson,
textjson,
textplain,
applicationxml,
textxml,
texthtml
});
});
配置Gzip压缩选项
services.ConfigureGzipCompressionProviderOptions(options =
{
options.Level = CompressionLevel.Optimal; 压缩级别
});
其他服务配置...
services.AddControllers();
}
Configure 方法中使用中间件:
csharp
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
响应压缩中间件应该放在管道中较前的位置
但要在异常处理中间件之后
app.UseResponseCompression();
其他中间件...
app.UseRouting();
app.UseEndpoints(endpoints =
{
endpoints.MapControllers();
});
}
3. 压缩级别选项
Gzip 提供多种压缩级别:
csharp
services.ConfigureGzipCompressionProviderOptions(options =
{
可选值:
- CompressionLevel.NoCompression (不压缩)
- CompressionLevel.Fastest (最快速度,压缩率较低)
- CompressionLevel.Optimal (最佳平衡,默认值)
- CompressionLevel.SmallestSize (最小尺寸,但最慢)
options.Level = CompressionLevel.Optimal;
});
4. 验证 Gzip 是否生效
可以使用以下方法验证:
-
使用浏览器开发者工具:
- 打开Network选项卡
- 检查响应头中是否有
Content-Encoding gzip
-
使用 cURL:
bashcurl -I -H Accept-Encoding gzip httplocalhost5000apiyour-endpoint
检查返回头中是否包含
Content-Encoding gzip
5. 高级配置
排除特定路径
如果需要排除某些路径不压缩:
csharp
app.UseResponseCompression();
app.Use(async (context, next) =
{
if (context.Request.Path.StartsWithSegments(no-compress))
{
context.Features.GetIResponseCompressionFeature().DisableCompression();
}
await next();
});
自定义压缩提供程序
如果需要自定义压缩逻辑:
csharp
services.AddResponseCompression(options =
{
options.Providers.AddCustomCompressionProvider();
});
自定义压缩提供程序
public class CustomCompressionProvider ICompressionProvider
{
public string EncodingName = gzip;
public bool SupportsFlush = true;
public Stream CreateStream(Stream outputStream)
{
return new GZipStream(outputStream, CompressionLevel.Optimal);
}
}
注意事项
- 不要压缩已经压缩的内容(如JPEGPNG等二进制文件)
- HTTPS压缩:默认出于安全考虑不压缩HTTPS内容,需显式设置
EnableForHttps = true
- 性能影响:压缩会消耗CPU资源,高流量应用需要测试性能影响
- 客户端支持:确保客户端请求中包含
Accept-Encoding gzip
头
通过以上配置,你的 .NET Core 5.0 应用就可以有效地使用 Gzip 压缩来减少响应大小,提高网络传输效率了。