在今天的文章中,我将讨论 .NET Core 中的“响应压缩”功能。
首先,我们简要了解什么是响应压缩。响应压缩是 .NET Framework 或 .NET Core 中使用的一种技术,它通过压缩来减小服务器发送的数据大小,从而减少网络流量、加速数据传输并改善用户体验。这种压缩是使用 HTTP 协议执行的,服务器可以使用 Gzip、Deflate 或 Brotli 等算法来压缩数据,而浏览器支持这些算法,并且可以将压缩数据解压缩回其原始形式。
此功能的使用非常简单:您需要将以下代码添加到文件中。Startup.cs
builder.Services.AddResponseCompression(options =>
{
options.EnableForHttps = true;
});
app.UseResponseCompression();
压缩提供程序使用特定的压缩算法压缩或解压缩数据。例如,使用 Gzip 压缩算法,而使用 Brotli 压缩算法。GzipCompressionProviderBrotliCompressionProvider
builder.Services.AddResponseCompression(options =>
{
options.EnableForHttps = true;
options.Providers.Add\<BrotliCompressionProvider\>();
options.Providers.Add\<GzipCompressionProvider\>();
});
使用两个不同的压缩提供程序 ( 和 ) 是为了支持不同的客户端压缩算法。客户端可能支持不同的压缩算法,因此服务器必须同时支持 Brotli 和 Gzip 压缩。BrotliCompressionProviderGzipCompressionProvider
您可以根据需要调整压缩级别。Brotli 和 Gzip 压缩提供程序默认使用最快的压缩级别,这可能不会产生最有效的压缩。要更改这些设置,请执行以下操作:
builder.Services.Configure<BrotliCompressionProviderOptions>(options =>
{
options.Level = CompressionLevel.Fastest;
});
builder.Services.Configure<GzipCompressionProviderOptions>(options =>
{
options.Level = CompressionLevel.SmallestSize;
});
请注意,您应该根据需要自定义压缩级别,并为您的应用程序选择最有效的方法。
让我们通过一个例子来看看我们可以从这种压缩方法中获得多少好处。我们将使用“GetWeatherForecast”API,它是 .NET 中的示例 API。首先,我们修改现有方法,返回 20000 条数据。
[HttpGet(Name = "GetWeatherForecast")]
public IEnumerable<WeatherForecast> Get()
{
// Method implementation...
}
然后,我们检查响应大小:
平均而言,响应量减少了 10 倍。
当然,这个功能也有缺点。如果您决定使用它,您应该考虑您的需求和资源,并相应地选择压缩方法和级别。
我们可以提到以下主要缺点: