Сжатие GZip не работает для приложения ASP.NET Core 2.2, размещенного в службе приложений Azure - PullRequest
1 голос
/ 25 сентября 2019

У меня есть приложение ASP.NET Core 2.2, работающее в службе приложений Azure.

У меня проблема в том, что ответы из приложения не сжимаются (отсутствует Content-Encoding header).

В моем понимании службы приложений мое приложение будет работать вне процесса за IIS, поэтому именно IIS должен отвечать за сжатие ответа.Насколько я понимаю, IIS в службе приложений должен быть по умолчанию настроен на автоматическое сжатие типов файлов, таких как JavaScript и CSS, с использованием gzip, однако этого не происходит.

Все запросы, отправленные на сервер, имеют правильный заголовок accept-encoding , так что это не проблема с браузером (я также проверял использование нескольких браузеров).

Я попытался явно установить urlCompression в web.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <urlCompression doStaticCompression="true" doDynamicCompression="true" />
    </system.webServer>
  </location>
</configuration>

, но это не имело значения.

Я также пытался установить IIS.Compression.SiteExtension в службу приложений, но это также не включало сжатие.

Я знаю, что яЯ мог бы использовать Response Compression Middleware непосредственно в моем приложении, но я бы предпочел, чтобы IIS обрабатывал его.

Итак, мой вопрос, короче говоря, как мне получить сжатие (GZIP или Brotli)) работает для моего приложения в службе приложений?

1 Ответ

0 голосов
/ 26 сентября 2019

Я пытался на моей стороне.По умолчанию сжатие включено в Azure, даже с протоколом HTTPS.

Чтобы устранить эту проблему, необходимо записать журнал трассировки невыполненных запросов.В журнале будет указано, почему сжатие не работает, как показано ниже:

enter image description here

Объяснение причин можно найти внизу.из этой страницы .

Чтобы получить журналы отслеживания невыполненных запросов, выполните следующие действия:

a) Включите «Отслеживание невыполненных запросов» на портале Azure: enter image description here

b) Добавьте приведенный ниже конфигурационный файл в раздел «system.webServer» файла web.config

<tracing>
 <traceFailedRequests>
 <remove path="*" />
 <add path="*">
  <traceAreas>
   <add provider="ASP" verbosity="Verbose" />
   <add provider="ASPNET" areas="Infrastructure,Module,Page,AppServices" verbosity="Verbose" />
   <add provider="ISAPI Extension" verbosity="Verbose" />
   <add provider="WWW Server" areas="Authentication,Security,Filter,StaticFile,CGI,Compression,Cache,RequestNotifications,Module,FastCGI" verbosity="Verbose" />
  </traceAreas>
  <failureDefinitions statusCodes="200" />
 </add>
</traceFailedRequests>
</tracing>

С помощью этого параметра он будет перехватывать все запросы с кодом состояния 200.

3,Найдите журнал в папке root \ LogFiles \ W3SVCXXX веб-приложения через FTP или KUDU (рекомендуется).Имя файла похоже на «fr000001.xml».На странице KUDU, нажав кнопку «скачать», откроется журнал в удобном для просмотра виде.Поиск "Сжатие" в журнале.Вот пример успеха: enter image description here

...