Сжатие Бротли в IIS - PullRequest
       55

Сжатие Бротли в IIS

0 голосов
/ 01 марта 2019

Я пытался настроить статическое сжатие для приложения ASP.NET, размещенного на IIS 10. Я использую пакет Microsoft IIS.Compression для этого: https://github.com/Microsoft/IIS.Compression

Фрагмент из applicationHost.config:

    <httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files"
           minFileSizeForComp="2700" 
           staticCompressionIgnoreHitFrequency="true">
        <scheme name="br" dll="%ProgramFiles%\IIS\IIS Compression\iisbrotli.dll" />
        <scheme name="gzip" dll="%ProgramFiles%\IIS\IIS Compression\iiszlib.dll" />
        <staticTypes>
            <add mimeType="text/*" enabled="true" />
            <add mimeType="message/*" enabled="true" />
            <add mimeType="application/javascript" enabled="true" />
            <add mimeType="application/atom+xml" enabled="true" />
            <add mimeType="application/xaml+xml" enabled="true" />
            <add mimeType="image/svg+xml" enabled="true" />
            <add mimeType="*/*" enabled="false" />
        </staticTypes>
    </httpCompression>

Фрагмент из приложения web.config:

<system.webServer>
  <staticContent>
     <remove fileExtension=".otf" />
     <remove fileExtension=".swz" />
     <remove fileExtension=".js" />
     <mimeMap fileExtension=".otf" mimeType="application/octet-stream" />
     <mimeMap fileExtension=".swz" mimeType="application/x-swz" />
     <mimeMap fileExtension=".js" mimeType="application/javascript" />
  </staticContent>
  <urlCompression doStaticCompression="true" />
</system.webserver>

Однако IIS всегда использует deflate, даже если запрос требует только br кодировка :

$ curl -s -o /dev/null -ikv -H "Accept-Encoding: br" -H "Content-Type: application/javascript" https://server/path/js_file.js


< HTTP/2 200 
< cache-control: public
< content-type: application/javascript
< content-encoding: deflate
< server: Microsoft-IIS/10.0
< date: Fri, 01 Mar 2019 00:43:30 GMT

Я решил включить отслеживание Failed Request для приложения и, таким образом, добавил следующий фрагмент кода в конфигурацию приложения:

<tracing>
    <traceFailedRequests>
        <add path="/path/*">                 
            <traceAreas>
                <add provider="WWW Server" areas="Compression" verbosity="Verbose" />
            </traceAreas>
            <failureDefinitions statusCodes="200" />
        </add>
    </traceFailedRequests>
</tracing>

В соответствующем файле трассировки яне вижу ничего похожего на STATIC_COMPRESSION_SUCCESS или STATIC_COMPRESSION_NOT_SUCCESS. Фактически, единственная соответствующая запись выглядит так:

GENERAL_SET_RESPONSE_HEADER 

HeaderName
Content-Encoding 

HeaderValue
deflate 

Replace
false 

Стоит отметить, что a) Модуль динамического сжатия содержимого неустановлен на этом сервере б) SSL-сертификат является самоподписанным (я не думаю, что это имеет значение).

Любая помощь по этому вопросу высоко ценится.

...