ASP.NET Core 中的响应压缩中间件

使用响应压缩中间件提高程序性能

1. 什么是响应压缩中间件

响应压缩中间件是ASP.NET Core的一部分,它通过应用支持的压缩算法(如Gzip和Brotli)来减小服务器发送到客户端的响应体积。这有助于加速数据传输,尤其适用于大段文本和数据,同时有效降低带宽消耗。

未使用压缩,相应1M

2. 启用压缩中间件

在ASP.NET Core项目中启用响应压缩中间件,需要在服务配置中启用压缩支持,并设置选项。

csharp 复制代码
using Microsoft.Net.Http.Headers;
using Microsoft.AspNetCore.ResponseCompression;

var builder = WebApplication.CreateBuilder();

builder.Services.AddResponseCompression(options =>
{
    options.EnableForHttps = true; // 启用HTTPS的压缩
});

var app = builder.Build();
app.UseResponseCompression();
app.Run(async context =>
{
    var accept = context.Request.Headers[HeaderNames.AcceptEncoding];
    if (!StringValues.IsNullOrEmpty(accept))
    {
        context.Response.Headers.Append(HeaderNames.Vary, HeaderNames.AcceptEncoding);
    }
    context.Response.ContentType = "text/plain";
    var responseText = new string('A', 1000000); // 1,000,000个字符
    await context.Response.WriteAsync(responseText);
});
app.Run();

https压缩

3. 配置压缩算法

默认情况下,ASP.NET Core使用Brotli作为优先压缩算法。但开发者也可以自定义使用的算法。例如,可以通过添加Gzip压缩提供程序来增强响应速度:

csharp 复制代码
builder.Services.AddResponseCompression(options =>
{
    options.EnableForHttps = true;
    options.Providers.Add<GzipCompressionProvider>();
});

Gzip压缩

4. 实现自定义压缩算法

如果需要使用自定义的压缩算法,可以通过实现ICompressionProvider接口来创建自定义压缩实现。EncodingName表示此ICompressionProvider生成的内容编码。中间件使用这些信息根据请求的Accept-Encoding标头中指定的列表来选择提供程序:

csharp 复制代码
public class CustomCompressionProvider : ICompressionProvider
{
    public string EncodingName => "mycustomcompression";
    public bool SupportsFlush => true;
    public Stream CreateStream(Stream outputStream)
    {
        // 创建自定义压缩流包装器
        return outputStream;
    }
}

然后在服务配置中添加自定义压缩提供程序:

csharp 复制代码
builder.Services.AddResponseCompression(options =>
{
    options.Providers.Add<BrotliCompressionProvider>();
    options.Providers.Add<GzipCompressionProvider>();
    options.Providers.Add<CustomCompressionProvider>();
    options.MimeTypes =
        ResponseCompressionDefaults.MimeTypes.Concat(
            new[] { "image/svg+xml" });
});

5. MIME类型

响应压缩中间件为压缩指定了一组默认的MIME类型。可以通过ResponseCompressionOptions.MimeTypes替换或添加MIME类型。请注意,不支持通配符MIME类型,如text/*。示例为image/svg+xml添加MIME类型,并压缩和提供ASP.NET Core横幅图像(banner.svg):

csharp 复制代码
builder.Services.AddResponseCompression(options =>
{
    options.EnableForHttps = true;
    options.Providers.Add<BrotliCompressionProvider>(); 
    options.MimeTypes =
        ResponseCompressionDefaults.MimeTypes.Concat(
            new[] { "image/svg+xml" });
});

其他

  • 默认情况下,ASP.NET Core 响应压缩中间件会启用HTTPS压缩。
  • EnableForHttps:是否对HTTPS封包进行压缩(默认是false)
  • 默认是采用Brotli压缩
  • MimeTypes:设定要进行压缩的MimeTypes
  • GzipCompressionProviderOptions:设置压缩方式(默认是CompressionLevel.Fastest快速压缩,NoCompression不应执行压缩 ,Optimal即使压缩需要更长的时间, 也应以最佳方式压缩响应。
    )

其他内容摘自 https://www.cnblogs.com/yyfh/p/11796421.html

Content-Encoding 标头值说明

Content-Encoding 标头值 说明
br Brotli 压缩数据格式
deflate DEFLATE 压缩数据格式
gzip Gzip 文件格式

以就是在ASP.NET Core中配置响应压缩中间件的详教程,可以帮助你减少响应大小,提高应用的响应速度。

相关推荐
野犬寒鸦4 分钟前
MyBatis-Plus 中使用 Wrapper 自定义 SQL
java·数据库·后端·sql·mybatis
expect7g11 分钟前
Java的DNS缓存问题
java·后端
全栈凯哥38 分钟前
20.缓存问题与解决方案详解教程
java·spring boot·redis·后端·缓存
小莫分享1 小时前
2023年最新总结,阿里,腾讯,百度,美团,头条等技术面试题目,以及答案,专家出题人分析汇总。
java·后端·面试·职场和发展
Brookty1 小时前
【操作系统】线程
java·linux·服务器·后端·学习·java-ee·操作系统
源码云商1 小时前
基于 SpringBoot + Vue 的 IT 技术交流和分享平台的设计与实现
vue.js·spring boot·后端
咚咚?1 小时前
docker 启动中间件
docker·中间件·容器
程序员爱钓鱼2 小时前
Go语言实战案例-简易计算器(加减乘除)
后端
学不会就看2 小时前
Django--01基本请求与响应流程
后端·python·django
Nejosi_念旧7 小时前
解读 Go 中的 constraints包
后端·golang·go