在 .NET Core 5.0 中启用 Gzip 压缩 Response

在 .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 是否生效

可以使用以下方法验证:

  1. 使用浏览器开发者工具:

    • 打开Network选项卡
    • 检查响应头中是否有 Content-Encoding gzip
  2. 使用 cURL:

    bash 复制代码
    curl -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);
    }
}

注意事项

  1. 不要压缩已经压缩的内容(如JPEGPNG等二进制文件)
  2. HTTPS压缩:默认出于安全考虑不压缩HTTPS内容,需显式设置 EnableForHttps = true
  3. 性能影响:压缩会消耗CPU资源,高流量应用需要测试性能影响
  4. 客户端支持:确保客户端请求中包含 Accept-Encoding gzip

通过以上配置,你的 .NET Core 5.0 应用就可以有效地使用 Gzip 压缩来减少响应大小,提高网络传输效率了。

相关推荐
Lost of 程序猿8 小时前
ASP.NET Core 后台任务全景:从 BackgroundService 到 Channel 队列,再到分布式调度
后端·asp.net·.netcore
宝桥南山1 天前
Blazor Web Assembly - 体验一下Authentication State从Server共享给Client
microsoft·微软·c#·asp.net·.net·.netcore
宝桥南山11 天前
Microsoft Agent Framework(.NET) - 尝试一下从MCP Server上获取Agent Skills
ai·微软·c#·aigc·.net·.netcore
海盗123419 天前
微软技术周报 ——2026-08-03
后端·python·microsoft·c#·.netcore
啊这啊这 六弦之首1 个月前
.NET Core跨平台的奥秘[中篇]:复用之殇
.netcore
心念枕惊1 个月前
.NET CORE 授权进阶-角色、策略与动态权限实现
java·前端·.netcore
完美火龙篇 四月的友1 个月前
通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core?
.net·.netcore
时代的狂1 个月前
如何理解 C# 的 async 和 await
c#·.netcore·async·await
尼米棕熊1 个月前
.NET CORE认证模块-注册方案与请求认证探究
.netcore
鸠摩智首席音效师3 个月前
如何在 macOS 上安装 .NET Core ?
macos·.netcore