Мы обслуживаем файлы для веб-сайта из нашего веб-интерфейса Asp.NET:
public class Startup
{
public void Configuration(IAppBuilder app)
{
var clientHostname = System.Configuration.ConfigurationManager.AppSettings["ClientHostname"];
var staticFileOptions = new StaticFileOptions()
{
OnPrepareResponse = staticFileResponseContext =>
{
staticFileResponseContext.OwinContext.Response.Headers.Add("Cache-Control", new[] { "public", "max-age=0" });
}
};
app.MapWhen(ctx => ctx.Request.Headers.Get("Host").Equals(clientHostname), app2 =>
{
app2.Use((context, next) =>
{
if (context.Request.Path.HasValue == false || context.Request.Path.ToString() == "/") // Serve index.html by default at root
{
context.Request.Path = new PathString("/Client/index.html");
}
else // Serve file
{
context.Request.Path = new PathString($"/Client{context.Request.Path}");
}
return next();
});
app2.UseStaticFiles(staticFileOptions);
});
}
}
Я хочу включить HTTP-сжатие. Согласно эта документация MSDN
Использовать технологии сжатия ответов на основе сервера в IIS, Apache или Nginx, где производительность промежуточного программного обеспечения, вероятно, не будет соответствовать производительности серверных модулей. Используйте Средство промежуточного сжатия ответа, если вы не можете использовать:
Модуль динамической компрессии IIS
Модуль Apache mod_deflate
Сжатие и декомпрессия NGINX
Сервер HTTP.sys(ранее называемый WebListener)
Kestrel
Итак, я думаю, что первым предпочтительным способом сделать это в моем случае является модуль динамического сжатия IIS. Соответственно, я попробовал это в своем Web.config в качестве теста, следуя в этом примере:
<configuration>
<system.webServer>
<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">
<dynamicTypes>
<add mimeType="*/*" enabled="true" />
</dynamicTypes>
<staticTypes>
<add mimeType="*/*" enabled="true" />
</staticTypes>
</httpCompression>
</system.webServer>
</configuration>
Однако заголовки ответов не включают Content-Encoding
, поэтому я не считаю, что он сжат. Что мне не хватает? Как я могу настроить это для наилучшего возможного сжатия с помощью сжатия?
Я проверил, что мой клиент отправляет заголовок Accept-Encoding
gzip, deflate, br
.
Update
Я попытался установить динамическое сжатие HTTP в IIS, поскольку он не установлен по умолчанию. Мне кажется, что я стараюсь обслуживать контент статически, но я думал, что это стоит попробовать. Я проверил, что как статическое, так и динамическое сжатие содержимого включены в диспетчере IIS. Тем не менее, я перезапустил его, но все еще не сжал.
Обновление 2
Я понял, что сжатие работало на наших серверах Azure, но все же не с моим локальным IIS.