Компрессия данных в ASP.NET Core

Протокол HTTP предусматривает использование сжатия данных. В спецификации указаны, такие способы, как deflate, compress, gzip.
Если клиент способен принимать данные в сжатом виде, то он отправляет заголовок
Accept-Encoding: gzip, deflate
Если на сервере реализован механизм сжатия данных, то сервер сжимает содержимое ответа и указать это в заголовке
Content-Encoding: gzip

Настройки на уровне IIS
Configuring HTTP Compression in IIS 7

<system.webServer>
  <httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">
    <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll"/>
    <dynamicTypes>
      <add mimeType="text/*" enabled="true"/>
      <add mimeType="message/*" enabled="true"/>
      <add mimeType="application/javascript" enabled="true"/>
      <add mimeType="*/*" enabled="false"/>
    </dynamicTypes>
    <staticTypes>
      <add mimeType="text/*" enabled="true"/>
      <add mimeType="message/*" enabled="true"/>
      <add mimeType="application/javascript" enabled="true"/>
      <add mimeType="*/*" enabled="false"/>
    </staticTypes>
  </httpCompression>
  <urlCompression doStaticCompression="true" doDynamicCompression="true"/>
</system.webServer>


Или воспользоваться готовым middleware для ASP.NETCore Microsoft.AspNetCore.ResponseCompression

А можно написать свой небольшой middleware с теми настройками которые будут оптимальны для конкретного проекта.
Для gzip берем GZipStream

Возможно будет не эффективно тратить ресурсы на компрессию большого количества небольших запросов. По этому добавим условие, что сжимаем данные только больше заданного количества байт. В приведенном примере это константа MinimumLength.
Таким же образом можно добавить любую другую логику.






Комментарии

Популярные сообщения из этого блога

Асинхронное выполнение процедур или триггера в MS SQL Server

Рекурсивные SQL запросы

Битовый вектор