在 ASP.NET Core 中启用 Brotli 和 Gzip 响应压缩

发布于:2025-03-11 ⋅ 阅读:(16) ⋅ 点赞:(0)

        在本文中,我们将探讨如何在 ASP.NET Core 应用程序中启用响应压缩,重点介绍 Brotli 和 Gzip 算法以及如何验证压缩是否有效。

什么是响应压缩?

响应压缩通过使用Brotli 或 Gzip等算法来最小化 HTTP 响应的大小。这些算法在传输文本资产(例如 HTML、CSS 和 JavaScript)之前将其压缩为较小的格式。现代浏览器会自动解压缩响应,确保为用户提供无缝的体验。

在带宽有限或高延迟的情况下,压缩尤其重要。如果没有压缩,Web 服务器将传输更大的负载,从而导致加载时间变慢。

在 ASP.NET Core 中间件中启用 Brotli 和 Gzip

要在 ASP.NET Core 应用程序中启用 Brotli 和 Gzip 压缩,必须配置响应压缩中间件

步骤 1:验证内置支持

Brotli 和 Gzip 在 ASP.NET Core 中均受原生支持,因此现代版本不需要安装额外的包。

但是,您仍然需要在代码中包含使用Microsoft.AspNetCore.ResponseCompression命名空间来访问所需的中间件类和配置选项。

步骤 2:配置中间件

将中间件添加到你的 Program.cs 或 Startup.cs 文件中:

using Microsoft.AspNetCore.ResponseCompression;

WebApplicationBuilder builder = WebApplication.CreateBuilder(args);

// Add Response Compression services
builder.Services.AddResponseCompression(options =>
{
    options.Providers.Add<BrotliCompressionProvider>();
    options.Providers.Add<GzipCompressionProvider>();
    options.EnableForHttps = true; // Enable for HTTPS responses
    options.MimeTypes = new[] { "text/plain", "text/css", "application/json", "application/javascript", "text/html" };
});

// Configure Brotli and Gzip compression levels
builder.Services.Configure<BrotliCompressionProviderOptions>(options =>
{
    options.Level = System.IO.Compression.CompressionLevel.Optimal;
});

builder.Services.Configure<GzipCompressionProviderOptions>(options =>
{
    options.Level = System.IO.Compression.CompressionLevel.Optimal;
});

WebApplication app = builder.Build();

// Enable Response Compression Middleware - before app.UseStaticFiles()
app.UseResponseCompression();

await app.RunAsync();

        确保 UseResponseCompression 位于中间件管道的早期。这意味着它应该出现在 UseStaticFiles 或 UseRouting 等中间件之前,以确保静态文件和动态内容在发送到客户端之前被压缩。 

检查压缩是否有效

        您可以使用 Chrome DevTools 和 GiftOfSpeed等外部​​工具来确认压缩是否正常工作。

使用 Chrome DevTools 进行验证
1. 在浏览器中打开您的应用程序。

2. 打开 Chrome DevTools(右键单击 > 检查 > 网络选项卡)。

3. 重新加载页面以捕获网络流量。

4. 单击一个请求(例如 HTML 文件)。

5. 检查 响应标头中的 Content-Encoding 标头。查找:

内容编码:gzip(用于 Gzip)
内容编码:br(用于 Brotli)

使用 GiftOfSpeed 进行验证

1、访问GZIP Compression Test | GiftOfSpeed

2、输入您的应用程序的 URL。

3、运行测试并验证压缩是否启用。

Brotli 和 Gzip 压缩之间的区别

Brotli 和 Gzip 是广泛使用的压缩算法,但在性能和用例上有所不同。

以下是比较:

特征 布罗特利 Gzip
压缩效率 更高(文件较小) 降低
压缩速度 慢点 快点
减压速度 快点 快速地
最适合 静态资产(HTML、CSS、JS) 动态内容(API 响应)
浏览器支持 现代浏览器(仅限 HTTPS) 普遍的
用例 优化静态资产 动态或旧版浏览器回退

为什么要同时使用两者?

同时使用 Brotli 和 Gzip 可以实现以下效果:

  • 兼容性: Gzip 确保可能不支持 Brotli 的旧版浏览器的功能,从而保持广泛的可访问性。

  • 效率: Brotli 实现了更好的压缩比,从而减小了 HTML、CSS 和 JavaScript 等静态资产的文件大小,提高了现代浏览器的性能。

例如,当提供 100KB 的 JavaScript 文件时:

  • Brotli 可能会将其压缩到 30KB(减少 70%)。

  • Gzip 可能将其压缩到 40KB(减少 60%)。

这种双重方法可以优化各种用户环境中的性能。

响应压缩的好处

1.改进SEO

响应压缩直接影响搜索引擎排名。

        如果您使用 SemRush 或 Ahrefs 等工具监控您网站的 SEO,您可能会注意到“网站性能”类别中出现“未压缩的页面”警告。

例如,SemRush 提供了清晰的提示: 

        如果响应标头中没有 Content-Encoding 实体,则会触发此问题。页面压缩对于优化网站至关重要。使用未压缩的页面会导致页面加载时间变慢,从而导致用户体验不佳和搜索引擎排名降低。 

2.更好的用户体验

        减少有效载荷大小可以加快内容传送速度,尤其是在速度较慢的网络上,从而改善整体用户体验。

3.降低基础设施成本

        更小的有效载荷意味着更少的带宽使用,从而节省 Azure App Service 等环境中的成本。

4. 减少累积布局偏移(CLS)

        HTML、CSS 和 JS 的更快交付可确保页面元素可预测地加载,从而减少布局偏移。

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。