只有添加两次,ASP.NET Core GZIP编码中间件才能工作

时间:2018-07-24 07:32:34

标签: c# asp.net-mvc http asp.net-core gzip

我正在尝试将GZIP编码添加到来自Web应用程序(.NET Core 2.1)的响应中

我正在关注guide

据此,我在Startup.cs中添加了以下几行

public void ConfigureServices(IServiceCollection services)
    {
        services.Configure<GzipCompressionProviderOptions>(options => options.Level = CompressionLevel.Fastest);
        services.AddResponseCompression(options =>
        {
            options.Providers.Add<GzipCompressionProvider>();
        });

        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

        // In production, the React files will be served from this directory
        services.AddSpaStaticFiles(configuration =>
        {
            configuration.RootPath = "ClientApp/build";
        });
    }

 public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {

        app.UseResponseCompression();
        app.UseStaticFiles();
        app.UseSpaStaticFiles();

        // Other middleware 
    }

我正在使用.NET Core 2.1随附的默认WebApplication模板(使用React)在全新的WebApplication上执行此操作。

但是,当我尝试查询应用程序上的控制器操作时,则不会应用任何编码。

使用chrome检查请求/响应是否有以下标头: NoGzip

请求标头包含 Accept-Encoding:gzip,deflate,br 标头,因此我认为请求不是问题。

现在这是奇怪的部分。一旦我添加app.UseResponseCompression();两次,我突然开始受到一些压缩。

在将app.UseResponseCompression();复制两次之后,标题如下所示: enter image description here

如您所见,gzip标头存在两次。 (响应的大小也相当小,因此gzip压缩似乎可以正常工作)

任何人都可以解释发生了什么以及为什么发生这种情况。以这种方式设置项目的主要问题是,在稍后的管道中,我无法解压缩请求,并且我想这是由于此处发生的某些魔术所致。

This是一个重现该问题的示例Web应用程序。 (运行应用程序,打开localhost:5015并导航到“获取数据”。-观察浏览器Web控制台中发生的情况)

1 个答案:

答案 0 :(得分:0)

有两个实例

Content-Encoding: gzip

暗示它已被压缩两次,因此您需要解压缩两次才能达到预期的效果。