Response Compression是 ASP.NET Core 提供的一种中间件,用于对 HTTP 响应内容进行压缩。它通过支持的压缩算法(如 Gzip 或 Brotli)压缩服务器发送给客户端的响应内容,从而加快网络传输速度,特别适合处理大段文本或数据。
using Microsoft.Net.Http.Headers; using Microsoft.Extensions.Primitives; var builder = WebApplication.CreateBuilder(); //builder.Services.AddResponseCompression(); 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();注意:将 EnableForHttps 设置为 true 存在安全风险,通过设置EnableForHttps 选项可以控制安全连接上的压缩响应。然而,默认情况下该选项是禁用的,因为启用它存在安全风险。
{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore.ResponseCompression": "Debug" } } }
builder.Services.AddResponseCompression(options => { options.EnableForHttps = true; // 启用 HTTPS 的压缩 options.Providers.Add<GzipCompressionProvider>(); });
builder.Services.AddResponseCompression(options => { options.EnableForHttps = true; // 启用 HTTPS 的压缩 //options.Providers.Add<GzipCompressionProvider>(); options.Providers.Add<CustomCompressionProvider>(); }); using Microsoft.AspNetCore.ResponseCompression; public class CustomCompressionProvider : ICompressionProvider { public string EncodingName => "mycustomcompression"; public bool SupportsFlush => true; public Stream CreateStream(Stream outputStream) { // 堆代码 duidaima.com return outputStream; } }