Компрессия данных в ASP.NET Core
Протокол HTTP предусматривает использование сжатия данных. В спецификации указаны, такие способы, как deflate, compress, gzip.
Если клиент способен принимать данные в сжатом виде, то он отправляет заголовок
Accept-Encoding: gzip, deflate
Если на сервере реализован механизм сжатия данных, то сервер сжимает содержимое ответа и указать это в заголовке
Content-Encoding: gzip
Настройки на уровне IIS
Configuring HTTP Compression in IIS 7
Или воспользоваться готовым middleware для ASP.NETCore Microsoft.AspNetCore.ResponseCompression
А можно написать свой небольшой middleware с теми настройками которые будут оптимальны для конкретного проекта.
Для gzip берем GZipStream
Возможно будет не эффективно тратить ресурсы на компрессию большого количества небольших запросов. По этому добавим условие, что сжимаем данные только больше заданного количества байт. В приведенном примере это константа MinimumLength.
Таким же образом можно добавить любую другую логику.
Если клиент способен принимать данные в сжатом виде, то он отправляет заголовок
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.
Таким же образом можно добавить любую другую логику.
Комментарии
Отправить комментарий