Получение ResponseCompression для работы в .NET Core 2.0 Web API

Я выполнил всю документацию по настройке ResponseCompression в моем проекте веб-API .NET Core 2.0, но я не вижу разницы в размере передачи. Вот результаты до и после использования Postman:

Перед сжатием: https://i.stack.imgur.com/jAAuy.jpg

После сжатия: https://i.stack.imgur.com/HviP5.jpg

Вот начало моего метода ConfigureServices в Startup.cs:

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();
}

Вот мое действие Get на моем VendorController:

[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();
}

Любая помощь приветствуется. Во всей документации сказано, что это должно дать мне довольно большую разницу в размере моего перевода.


person stumpykilo    schedule 02.12.2017    source источник


Ответы (1)


Сжатие в вашем случае работает нормально, только вы проверяете не совсем правильно.

Почтальон на самом деле показывает размер несжатых данных. Это имеет смысл, потому что Postman - это приложение, которое работает с протоколом HTTP, и его не слишком заботит размер базового протокола передачи (например, TCP).

Самый простой способ узнать фактический размер ответа - использовать Fiddler. Вы можете добавить ResponseSize столбец, который находится в Miscellaneous коллекции, потому что он фактически не является частью HTTP-ответа. Тогда вы увидите, что для таких синтетических данных размер сжатого пакета действительно более чем в 10 раз меньше, чем для несжатого:

введите здесь описание изображения

person CodeFuller    schedule 03.12.2017
comment
Спасибо за ответ CodeFuller, который очень помог. Я новичок в использовании Postman и Fiddler. Итак, то, что я видел в Postman, - это конечный результат, потому что он уже был распакован? Такой поток выглядит следующим образом: запрос (http) - ›ответ (tcp) -› сжатый (tcp) - ›несжатый (tcp) -› ответ (http)? Есть ли сайт или ссылка, которую вы можете отправить мне, чтобы более подробно объяснить, что происходит с TCP / HTTP? - person stumpykilo; 03.12.2017
comment
Сжатие является частью протокола HTTP, поэтому базовый транспортный протокол (например, TCP) об этом не знает. Почтальон показывает размер несжатых данных не потому, что получает их в несжатом виде, а потому, что знает, как рассчитать размер исходных данных. Для начала ознакомьтесь с этими статьями: developer.mozilla.org/en-US / docs / Web / HTTP / Compression и betterexplained.com/articles/ - person CodeFuller; 04.12.2017