Я пытался настроить статическое сжатие для приложения 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-сертификат является самоподписанным (я не думаю, что это имеет значение).
Любая помощь по этому вопросу высоко ценится.