Pull to refresh

Как использовать сжатие ответа в ASP.Net Core

Reading time4 min
Views5.7K
Original author: Joydip Kanjilal

Воспользуйтесь преимуществами компонента промежуточной обработки для сжатия ответов (Response Compression Middleware) в ASP.Net Core, чтобы снизить требования к пропускной способности и повысить оперативность ваших приложений.

ASP.Net Core — это открытая, кросс-платформенная и модульная среда для создания высокопроизводительных веб-приложений. Вы можете запускать приложения ASP.Net Core в Windows, Linux и даже MacOS. Полностью современная веб-инфраструктура, ASP.Net Core имеет встроенную поддержку сжатия ответов, позволяя уменьшить размер ответов и сократить время отклика. В этой статье мы рассмотрим, как работает сжатие ответов и как мы можем использовать компонент промежуточной обработки для сжатия ответов в ASP.Net Core.

Сжатие — это простой способ снизить сетевой трафик и увеличить скорость обмена данными между ресурсами веб-сервера и клиентами. Gzip и Deflate являются популярными алгоритмами, доступными для достижения сжатия и большинство современных веб-браузеров поддерживают сжатие ответа. Промежуточная обработка для сжатия ответов ASP.Net Core по умолчанию использует сжатие Gzip.

Обратите внимание, что конвейер приложения в ASP.Net Core содержит ряд делегатов запросов, которые вызываются последовательно. Мы будем использовать это для реализации сжатия запроса. Конвейер промежуточной обработки настраивается с использованием метода Configure в файле Startup.cs. Здесь вы можете объединить свои конвейеры ASP.Net Core. Мы рассмотрим это далее.

Создание приложения ASP.Net Core


Предполагая, что вы используете Visual Studio Community Edition 2017 и .Net Core уже установлен, выполните следующие действия, чтобы создать первое приложение ASP.Net Core в Visual Studio.

  1. В Visual Studio IDE, нажмите File -> New -> Project.
  2. Выберите «ASP.Net Core Web Application (.Net Core)» из списка шаблонов.
  3. Выберите Web Application.
  4. Введите имя приложения и нажмите OK.
  5. В окне «New ASP.NET Core Web Application» — выберите ".Net Core and ASP.Net Core 2.0."
  6. Затем выберите шаблон «Web API», снимите галочку «Enable Docker Support», и нажмите OK.

Теперь, когда вы создали проект ASP.Net Core, установите пакет ResponseCompression через диспетчер пакетов NuGet, чтобы включить сжатие Gzip в только что созданном проекте ASP.Net Core.

> Install-Package Microsoft.AspNetCore.ResponseCompression -Version 2.0.1

На момент написания этой статьи последняя стабильная версия этого пакета — 2.0.1.

Настройка сжатия ответа в ASP.Net Core


После установки пакета ResponseCompression следующий шаг — настроить его. Для этого вам нужно будет отредактировать файл Startup.cs и включить сжатие с помощью методов ConfigureServices и Configure. Метод ConfigureServices используется для добавления сервисов в контейнер, а метод Configure используется для настройки конвейера HTTP-запросов. Обратите внимание, что оба метода автоматически запускаются во время выполнения.

Вот как сделать добавление сжатия ответа в методе ConfigureServices файла Startup.cs.

public void ConfigureServices(IServiceCollection services)
        {
            services.AddResponseCompression();
            services.AddMvc();
        }

Следующий фрагмент кода иллюстрирует метод Configure. Здесь мы добавили промежуточную обработку для сжатия к конвейеру перед другой обработкой.

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            app.UseResponseCompression();
            app.UseMvc();
        }

Внедрение контроллера в ASP.Net Core


Теперь, когда сжатие ответа было установлено в проекте и настроено, давайте внедрим контроллер для демонстрации сжатия ответа. Для этого выберите папку Controllers вашего проекта и нажмите «Add -> Controller». Выберите шаблон «API Controller — Empty» из списка шаблонов, отображаемых в окне «Add Scaffold», и введите имя для контроллера при появлении запроса. Затем замените код по умолчанию следующим.

[Produces(“application/json”)]
    [Route(“api/Default”)]
    public class DefaultController : Controller
    {
        // GET: api/Default
        [HttpGet]
        public List<Message> Get()
        {
            List<Message> lst = new List<Message>();
            for(int index=0; index <100; index++)
            {
                Message message = new Message();
                message.Text = “This is a text message.”;
                lst.Add(message);
            }
            return lst;
        }
    }

Класс Message содержит только одно свойство string.

public class Message
    {
        public string Text { get; set; }
    }

После выполнения этого метода, можно видеть, что размер сжатого ответа составляет 0,091 КБ. Когда сжатие было отключено, размер ответа составлял 3,419 КБ. Чтобы отключить сжатие ответа, вы можете просто прокомментировать соответствующие строки в файле Startup.cs.

В методе ConfigureServices:

//services.AddResponseCompression();

В методе Configure:

//app.UseResponseCompression();

Для работы сжатия ответа клиент должен сообщить серверу о своих возможностях, отправив заголовок Accept-Encoding с запросом. Сервер, в свою очередь, должен включать этот заголовок в сжатый ответ, чтобы сообщить клиенту, что ответ был сжат.

Обратите внимание, что хотя сжатие ответов в ASP.Net Core гибко, легко настраивается и просто в использовании — оно сравнительно медленнее, чем сжатие IIS. Больше о сжатии ответа в ASP.Net Core в документации Microsoft ASP.NET Core.
Tags:
Hubs:
Total votes 12: ↑9 and ↓3+6
Comments4

Articles