ASP.NET Core中的響應壓縮
阿新 • • 發佈:2020-07-29
### 介紹
響應壓縮技術是目前Web開發領域中比較常用的技術,在頻寬資源受限的情況下,使用壓縮技術是提升頻寬負載的首選方案。我們熟悉的Web伺服器,比如IIS、Tomcat、Nginx、Apache等都可以使用壓縮技術,常用的壓縮型別包括Brotli、Gzip、Deflate,它們對CSS、JavaScript、HTML、XML 和 JSON等型別的效果還是比較明顯的,但是也存在一定的限制對於圖片效果可能沒那麼好,因為圖片本身就是壓縮格式。其次,對於小於大約150-1000 位元組的檔案(具體取決於檔案的內容和壓縮的效率,壓縮小檔案的開銷可能會產生比未壓縮檔案更大的壓縮檔案。在ASP.NET Core中我們可以使用非常簡單的方式來使用響應壓縮。
### 使用方式
在ASP.NET Core中使用響應壓縮的方式比較簡單。首先,在ConfigureServices中新增services.AddResponseCompression注入響應壓縮相關的設定,比如使用的壓縮型別、壓縮級別、壓縮目標型別等。其次,在Configure新增app.UseResponseCompression攔截請求判斷是否需要壓縮,大致使用方式如下
```cs
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddResponseCompression();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseResponseCompression();
}
}
```
如果需要自定義一些配置的話還可以手動設定壓縮相關
```cs
public void ConfigureServices(IServiceCollection services)
{
services.AddResponseCompression(options =>
{
//可以新增多種壓縮型別,程式會根據級別自動獲取最優方式
options.Providers.Add();
options.Providers.Add();
//新增自定義壓縮策略
options.Providers.Add();
//針對指定的MimeType來使用壓縮策略
options.MimeTypes =
ResponseCompressionDefaults.MimeTypes.Concat(
new[] { "application/json" });
});
//針對不同的壓縮型別,設定對應的壓縮級別
services.Configure(options =>
{
//使用最快的方式進行壓縮,單不一定是壓縮效果最好的方式
options.Level = CompressionLevel.Fastest;
//不進行壓縮操作
//options.Level = CompressionLevel.NoCompression;
//即使需要耗費很長的時間,也要使用壓縮效果最好的方式
//options.Level = CompressionLevel.Optimal;
});
}
```
關於響應壓縮大致的工作方式就是,當發起Http請求的時候在Request Header中新增Accept-Encoding:gzip或者其他你想要的壓縮型別,可以傳遞多個型別。服務端接收到請求獲取Accept-Encoding判斷是否支援該種類型的壓縮方式,如果支援則壓縮輸出內容相關並且設定Content-Encoding為當前使用的壓縮方式一起返回。客戶端得到響應之後獲取Content-Encoding判斷服務端是否採用了壓縮技術,並根據對應的值判斷使用了哪種壓縮型別,然後使用對應的解壓演算法得到原始資料。
### 原始碼探究
通過上面的介紹,相信大家對ResponseCompression有了一定的瞭解,接下來我們通過檢視原始碼的方式瞭解一下它大致的工作原理。
#### AddResponseCompression
首先我們來檢視注入相關的程式碼,具體程式碼承載在ResponseCompressionServicesExtensions擴充套件類中[[點選檢視原始碼