.NET Core 系列之 WebAPI 響應(yīng)壓縮
一、介紹
背景目前在開發(fā)一個(gè)爬蟲框架,使用了.NET Core WebAPI接口作為爬蟲調(diào)用入口,在調(diào)用 WebAPI時(shí)發(fā)現(xiàn)爬蟲耗時(shí)很短(1秒左右),但客戶端獲取響應(yīng)時(shí)間卻在3~4秒。對(duì)于這個(gè)問題考慮使用響應(yīng)壓縮技術(shù)。
網(wǎng)絡(luò)帶寬是一種有限資源。減小響應(yīng)大小通常可顯著提高應(yīng)用的響應(yīng)速度。減小有效負(fù)載大小的一種方式是壓縮應(yīng)用的響應(yīng)。
在 IIS、Apache 或 Nginx 中是使用基于服務(wù)器的響應(yīng)壓縮技術(shù)??紤]到動(dòng)態(tài)壓縮以及減少服務(wù)器的配置,這里介紹.NET Core中間件來實(shí)現(xiàn)響應(yīng)壓縮。
壓縮的事項(xiàng):
1、能夠壓縮的包括:CSS、JavaScript、HTML、XML 和 JSON。
2、對(duì)圖片等資產(chǎn)不會(huì)壓縮,因?yàn)閴嚎s的字節(jié)只會(huì)小幅減少,而被處理壓縮所花費(fèi)的時(shí)間所掩蓋。
3、不要壓縮小于約 150-1000 字節(jié)的文件。
4、客戶端請(qǐng)求時(shí)通過Accept-Encoding來指定壓縮類型,中間件支持二種常用的壓縮類型如下:
Accept-Encoding: br,gzip
--br是指Brotli 壓縮格式,默認(rèn)的壓縮方式。
--gzip是指Gzip壓縮格式。
5、中間件為壓縮指定一組默認(rèn)的 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
二、配置壓縮中間件
使用壓縮中間件很簡(jiǎn)單,代碼如下:
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddResponseCompression();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseResponseCompression();
}
}
三、演示
客戶端請(qǐng)求可以是Postman,Fiddler, RestSharp等,下面使用RestSharp來請(qǐng)求爬蟲接口獲取數(shù)據(jù),默認(rèn)RestSharp請(qǐng)求頭帶了Accept-Encoding: gzip, deflate
3.1、未使用響應(yīng)壓縮技術(shù),請(qǐng)求使用fiddler監(jiān)聽

1、請(qǐng)求頭statistics選項(xiàng)卡中,接口耗時(shí)4.822秒
2、響應(yīng)Transformer選項(xiàng)卡中,響應(yīng)字節(jié)572,839
3、響應(yīng)TextView能直接看到明文
3.2、使用響應(yīng)壓縮技術(shù),請(qǐng)求使用fiddler監(jiān)聽

1、請(qǐng)求頭statistics選項(xiàng)卡中,接口耗時(shí)1.182秒
2、響應(yīng)Transformer選項(xiàng)卡中,響應(yīng)字節(jié)98,930
3、響應(yīng)TextView選項(xiàng)卡中,不能直接看到明文
4、響應(yīng)Headers選項(xiàng)卡中,Content-Encoding:gzip
轉(zhuǎn)自:花陰偷移
鏈接:cnblogs.com/MrHSR/p/16334266.html
