.NET Core 系列之 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监听

.NET Core 系列之 WebAPI 响应压缩

1、请求头statistics选项卡中,接口耗时4.822秒

2、响应Transformer选项卡中,响应字节572,839

3、响应TextView能直接看到明文

3.2、使用响应压缩技术,请求使用fiddler监听

.NET Core 系列之 WebAPI 响应压缩

1、请求头statistics选项卡中,接口耗时1.182秒

2、响应Transformer选项卡中,响应字节98,930

3、响应TextView选项卡中,不能直接看到明文

4、响应Headers选项卡中,Content-Encoding:gzip