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中配置响应压缩中间件的详教程,可以帮助你减少响应大小,提高应用的响应速度。

相关推荐
红尘散仙3 小时前
我把终端小说阅读器接上了 AI Agent:TRNovel 现在能用 skill 生成书源了
人工智能·后端·rust
卷毛的技术笔记4 小时前
告别硬编码!Spring AI Alibaba 实现 AI Agent 智能工具调用(Tool Calling)
java·人工智能·后端·python·spring·ai编程
会编程的土豆4 小时前
Go 语言反射(Reflection)详解
开发语言·后端·golang
喵个咪5 小时前
GoWind Toolkit Go后端代码生成 完整全流程实战
后端·go·orm
basketball6165 小时前
Go 语言从入门到进阶:4. 数组和MAP使用方法总结
开发语言·后端·golang
qq_2518364575 小时前
SpringBoot+Vue 共享电池柜管理系统 完整实现 前后端分离项目实战 完整代码
vue.js·spring boot·后端
zhangxingchao6 小时前
AI 大模型核心六:量化、Workflow 与 Agent、多轮 RAG
前端·人工智能·后端
IT_陈寒7 小时前
Vite打包时遇到的坑,原来问题出在这里
前端·人工智能·后端
ayqy贾杰8 小时前
基层管理的三板斧,在AI时代行不通了
前端·后端·团队管理
Apifox8 小时前
Apifox 5 月更新|Postman 导入优化、Runner 支持非 root 运行、请求代码自动带鉴权
前端·后端·安全