Обложка канала

.NET Разработчик

Опытный разработчик не так давно зашёл в .Net и поставил цель получить сертификат Microsoft. Свой ежедневный прогресс он описывает на канале .Net Разработчик. Заметки об изученном материале, советы по повышению производительности и поддержке мотивации, ин

.NET Разработчик

3 года назад
Открыть в
День 1613. #ЗаметкиНаПолях Сжатие Ответов в ASP.NET Core Уменьшение размера ответа API может заметно повысить производительность вашего приложения. А поскольку пропускная способность сети является ограниченным ресурсом, следует, по крайней мере, рассмотреть преимущества сжатия ответов. Использовать сжатие ответов в приложениях .NET очень просто. Нужно вызвать два метода: - AddResponseCompression – для настройки сервисов сжатия ответа; - UseResponseCompression – для добавления промежуточного ПО сжатия ответа в конвейер. Сжатие ответов по умолчанию отключено в HTTPS, поэтому его надо явно включить:
builder.Services
 .AddResponseCompression(opts =>
{
  opts.EnableForHttps = true;
});

Когда использовать В идеале лучше использовать серверное сжатие ответа, если ваш сервер приложений (IIS, Apache, Nginx) поддерживает его. Если сервер не поддерживает сжатие ответов, то оправдано использование промежуточного ПО. Однако т.к. оно происходит на уровне приложения, производительность обычно падает. Еще одной проблемой является безопасность, т.к. использование сжатия ответов в HTTPS может подвергнуть вас атакам CRIME и BREACH. Вот что можно сделать, чтобы защититься от них: - Добавить токены защиты от подделки (anti-forgery). - Не отправлять секреты приложения в теле запроса. - Добавить ограничитель трафика Настройка провайдеров сжатия При вызове AddResponseCompression по умолчанию добавляются два провайдера сжатия (но можно добавить свои в настройках AddResponseCompression): - BrotliCompressionProvider - GzipCompressionProvider По умолчанию используется сжатие Brotli, если оно поддерживается клиентом. В противном случае будет использоваться Gzip. Можно настроить уровень сжатия для Brotli и Gzip: - Optimal, - Fastest (по умолчанию), - NoCompression, - SmallestSize.
builder.Services
 .Configure<BrotliCompressionProviderOptions>(opts =>
{
  opts.Level = CompressionLevel.Optimal;
});
Заметим, что уровень SmallestSize ожидаемо имеет сильное негативное влияние на время ответа. Итого Сжатие ответов — хороший метод повышения производительности API и снижения сетевых затрат. В идеале желательно использовать серверное сжатие ответов, если оно поддерживается вашим сервером приложений. Если нет, сжатие ответов в приложении доступно в .NET через промежуточное ПО. Это увеличивает нагрузку на ЦП и может подвергнуть HTTPS некоторым рискам безопасности, но есть способы смягчить это. Обычно конфигурации по умолчанию для провайдера сжатия и уровня сжатия дают отличные результаты. Вы можете протестировать значение сжатия ответа в своём приложении и изучить изменения в размере и времени ответа. Попробуйте разные провайдеры сжатия, изменяя заголовок Accept-Encoding клиента, а также настраивая разные уровни сжатия в приложении. Источник: https://www.milanjovanovic.tech/blog/response-compression-in-aspnetcore