在本文中,我们将探讨如何在 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 的更快交付可确保页面元素可预测地加载,从而减少布局偏移。
如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。