asp.net core系列 77 webapi響應壓縮
一.介紹
背景:目前在開發一個爬蟲框架,使用了.net core webapi介面作為爬蟲呼叫入口,在呼叫 webapi時發現爬蟲耗時很短(1秒左右),但客戶端獲取響應時間卻在3~4秒。對於這個問題考慮使用響應壓縮技術。
網路頻寬是一種有限資源。 減小響應大小通常可顯著提高應用的響應速度。 減小有效負載大小的一種方式是壓縮應用的響應。
在 IIS、Apache 或 Nginx 中是使用基於伺服器的響應壓縮技術。考慮到動態壓縮以及減少伺服器的配置,這裡介紹.net core中介軟體來實現響應壓縮。
壓縮的事項:
1)能夠壓縮的包括:CSS、JavaScript、HTML、XML 和 JSON。
2)對圖片等資產不會壓縮,因為壓縮的位元組只會小幅減少,而被處理壓縮所花費的時間所掩蓋。
3)不要壓縮小於約 150-1000 位元組的檔案。
4)客戶端請求時通過Accept-Encoding來指定壓縮型別,中介軟體支援二種常用的壓縮型別如下:
Accept-Encoding: br,gzip
--br是指Brotli 壓縮格式,預設的壓縮方式。
--gzip是指Gzip壓縮格式。
5)中介軟體為壓縮指定一組預設的 MIME 型別:
application/javascript
application/json
application/xml
text/css
text/html
text/json
text/plain
text/xml
具體介紹看官方文件:https://docs.microsoft.com/zh-cn/aspnet/core/performance/response-compression?view=aspnetcore-5.0
二. 配置壓縮中介軟體
使用壓縮中介軟體很簡單,程式碼如下:
public class Startup { public void ConfigureServices(IServiceCollection services) { services.AddResponseCompression(); } public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.UseResponseCompression(); } }
三.演示
客戶端請求可以是Postman,Fiddler, RestSharp等,下面使用RestSharp來請求爬蟲介面獲取資料,預設RestSharp請求頭帶了Accept-Encoding: gzip, deflate
3.1 未使用響應壓縮技術,請求使用fiddler監聽
1)請求頭statistics選項卡中,介面耗時4.822秒
2) 響應Transformer選項卡中,響應位元組572,839
3) 響應TextView能直接看到明文
3.2 使用響應壓縮技術,請求使用fiddler監聽
1)請求頭statistics選項卡中,介面耗時1.182秒
2) 響應Transformer選項卡中,響應位元組98,930
3) 響應TextView選項卡中,不能直接看到明文
4)響應Headers選項卡中,Content-Encoding:gzip