1. 程式人生 > >ASP.NET Core中的響應壓縮

ASP.NET Core中的響應壓縮

### 介紹     響應壓縮技術是目前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擴充套件類中[[點選檢視原始碼