【问题标题】:Getting ResponseCompression to work in .NET Core 2.0 Web API让 ResponseCompression 在 .NET Core 2.0 Web API 中工作
【发布时间】:2018-05-16 13:11:15
【问题描述】:

我已按照所有文档在我的 .NET Core 2.0 Web API 项目中设置 ResponseCompression,但我看不到传输大小的差异。以下是使用 Postman 的前后结果:

压缩前: https://i.stack.imgur.com/jAAuy.jpg

压缩后: https://i.stack.imgur.com/HviP5.jpg

这是我在 Startup.cs 中的 ConfigureServices 方法的开始:

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

这是我在 Startup.cs 中的配置方法:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseResponseCompression();

    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    app.UseSwagger();
    app.UseSwaggerUI(c =>
    {
        c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
    });

    app.UseMvc();
}

这是我对 VendorController 的 Get 操作:

[HttpGet]
public IActionResult Get()
{
    var stuff = new Collection<string>();
    for (int i = 0; i < 100000; i++)
    {
        stuff.Add($"hello{i}");
    }
    return Ok(stuff);
}

我没有使用 IIS,这是我的 Program.cs:

public class Program
{
    public static void Main(string[] args)
    {
        BuildWebHost(args).Run();
    }

    public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .Build();
}

任何帮助将不胜感激。所有文档都说这应该会给我的转移规模带来很大的不同。

【问题讨论】:

    标签: c# asp.net-core-2.0 asp.net-core-webapi


    【解决方案1】:

    在你的情况下压缩工作正常,你只是检查它不太正确。

    Postman 会实际显示非压缩数据的大小。这是有道理的,因为 Postman 是一个使用 HTTP 协议运行的应用程序,它并不太关心底层传输协议(如 TCP)的大小。

    查看实际响应大小的最简单方法是使用 Fiddler。您可以在 Miscellaneous 集合下添加 ResponseSize 列,因为它实际上不是 HTTP 响应的一部分。然后你会看到,对于这样的合成数据,压缩包的大小确实是非压缩包的 10 倍以上:

    【讨论】:

    • 感谢您对 CodeFuller 的回复,这对您有很大帮助。我是使用 Postman 和 Fiddler 的新手。那么我在 Postman 上看到的最终结果是因为它已经被解压缩了吗?流程是这样的:请求(http)->响应(tcp)->压缩(tcp)->未压缩(tcp)->响应(http)?有没有可以发给我的网站或链接来更详细地解释 TCP/HTTP 发生了什么?
    • 压缩是 HTTP 协议的一部分,因此底层传输协议(如 TCP)不知道它。 Postman 向您显示未压缩数据的大小不是因为它接收到未压缩的数据,而是因为它知道如何计算原始数据的大小。查看这些文章作为开始:developer.mozilla.org/en-US/docs/Web/HTTP/Compressionbetterexplained.com/articles/…
    猜你喜欢
    • 2019-01-12
    • 2019-03-16
    • 2018-03-26
    • 2018-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多