Asp.Net Core 压缩封包

简介

Asp.Net Core 不会自动把所有封包进行压缩,要对Response的内容进行压缩,可以使用ResponseCompression套件提供的压缩方式

启用封包压缩

在Startup.ConfigureServices 加入封包压缩的服务以及Startup.Configure 注册封包压缩的中间件.

Startup.cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddResponseCompression();
services.AddMvc();
}

public void Configure(IApplicationBuilder app)
{
app.UseResponseCompression();
app.UseStaticFiles();
app.UseMvcWithDefaultRoute();
}
}

ps:默认的压缩方式是Gzip

ResponseCompressionOptions

可以通过ResponseCompressionOptions调整要被压缩的MimeTypes以及压缩的方法等.

Startup.cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddResponseCompression(options =>
{
options.EnableForHttps = true;
options.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat(new[]
{
"image/png"
});
});
services.Configure<GzipCompressionProviderOptions>(options =>
{
options.Level = System.IO.Compression.CompressionLevel.Optimal;
});
services.AddMvc();
}
}
  • EnableForHttps

    是否要对Https的封包进行压缩.默认为false

  • MimeType

    设置要进行压缩的MimeTypes.默认的有text/plain, text/css, application/javascript, text/html, application/xml, text/xml, application/json, text/json.

  • GzipCompressionProviderOptions

    设定Gzip的压缩方式,默认为CompressionLevelFastest 快速压缩.

压缩的好处是Response的封包变小,节省流量,但会消耗Cpu效能

自定义压缩

某些情况可能会需要自定义封包的压缩方式,例如Server to Server的Api对接,双方使用约定好的压缩方式.

可以继承ICompressionProvider,实例化自定义的压缩方法.并通过HttpHeader的Accept-Encoding指定压缩方式.再将自定义的压缩方法加入到ResponseCompressionOptions.Providers.

CustomCompressionProvider.cs

1
2
3
4
5
6
7
8
9
10
public class CustomCompressionProvider:ICompressionProvider
{
public string EncodingName => "customcompression";
public bool SupportsFlush => true;

public Stream CreateStream(Stream outputStream)
{
return outputStream;
}
}

Startup.cs

1
2
3
4
5
6
7
8
9
10
11
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddResponseCompression(options =>
{
options.Providers.Add<CustomCompressionProvider>();
});
services.AddMvc();
}
}

当Http Header的Accept-Encoding = customcompression 就会使用CustomCompressionProvider压缩封包.


Asp.Net Core 压缩封包
http://blog.chcaty.cn/2019/08/10/asp-net-core-ya-suo-feng-bao/
作者
caty
发布于
2019年8月10日
许可协议