在 .NET Core 5.0 中啟用 Gzip 壓縮 Response
在 .NET Core 5.0 (ASP.NET Core 5.0) 中啟用 Gzip 壓縮主要通過響應壓縮中間件實現。以下是詳細配置步驟:
1. 安裝必要的 NuGet 包
首先確保已安裝響應壓縮包:
dotnet add package Microsoft.AspNetCore.ResponseCompression
2. 在 Startup.cs 中配置
ConfigureServices 方法中添加服務:
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 方法中使用中間件:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{響應壓縮中間件應該放在管道中較前的位置但要在異常處理中間件之后app.UseResponseCompression();其他中間件...app.UseRouting();app.UseEndpoints(endpoints ={endpoints.MapControllers();});
}
3. 壓縮級別選項
Gzip 提供多種壓縮級別:
services.ConfigureGzipCompressionProviderOptions(options =
{可選值:- CompressionLevel.NoCompression (不壓縮)- CompressionLevel.Fastest (最快速度,壓縮率較低)- CompressionLevel.Optimal (最佳平衡,默認值)- CompressionLevel.SmallestSize (最小尺寸,但最慢)options.Level = CompressionLevel.Optimal;
});
4. 驗證 Gzip 是否生效
可以使用以下方法驗證:
-
使用瀏覽器開發者工具:
- 打開Network選項卡
- 檢查響應頭中是否有
Content-Encoding gzip
-
使用 cURL:
curl -I -H Accept-Encoding gzip httplocalhost5000apiyour-endpoint
檢查返回頭中是否包含
Content-Encoding gzip
5. 高級配置
排除特定路徑
如果需要排除某些路徑不壓縮:
app.UseResponseCompression();app.Use(async (context, next) =
{if (context.Request.Path.StartsWithSegments(no-compress)){context.Features.GetIResponseCompressionFeature().DisableCompression();}await next();
});
自定義壓縮提供程序
如果需要自定義壓縮邏輯:
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);}
}
注意事項
- 不要壓縮已經壓縮的內容(如JPEGPNG等二進制文件)
- HTTPS壓縮:默認出于安全考慮不壓縮HTTPS內容,需顯式設置
EnableForHttps = true
- 性能影響:壓縮會消耗CPU資源,高流量應用需要測試性能影響
- 客戶端支持:確保客戶端請求中包含
Accept-Encoding gzip
頭
通過以上配置,你的 .NET Core 5.0 應用就可以有效地使用 Gzip 壓縮來減少響應大小,提高網絡傳輸效率了。