Mamy służyć plików na stronie internetowej naszej Asp .NET Web API:Włącz kompresję HTTP z ASP.NET Web API
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);
});
}
}
Chcę włączyć kompresję HTTP. Według this MSDN documentation
wykorzystywania technologii kompresji odpowiedź serwerowych w IIS, Apache lub Nginx gdzie wydajność middleware prawdopodobnie nie będzie zgodny z modułów serwerowych. Użyj kompresji Response Middleware, gdy jesteś w stanie użyć: moduł
IIS kompresji dynamicznej
moduł mod_deflate Apache
nginx kompresji i dekompresji
HTTP.sys serwera (poprzednio zwany WebListener)
Pustułka
Więc myślę, że pierwszy korzystny sposób, aby zrobić to w moim przypadku jest z IIS dynamiczny moduł kompresji. W związku z powyższym, próbowałem to w moim Web.config, jako test, po this example:
<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>
Jednak nagłówki odpowiedzi nie zawierają Content-Encoding
, więc nie wierzę, że jest skompresowany. czego mi brakuje? Jak mogę to ustawić, aby jak najlepiej obsługiwać kompresję?
Sprawdziłem, że mój klient wysyła nagłówek Accept-Encoding
z gzip, deflate, br
.
Aktualizacja
Próbowałem instalacji Dynamiczna Kompresja HTTP w IIS, ponieważ nie jest instalowany domyślnie. Wydaje mi się, że próbuję statycznie obsługiwać zawartość, ale pomyślałem, że warto spróbować. Sprawdziłem, czy kompresja zawartości statycznej i dynamicznej jest włączona w Menedżerze IIS. Jednak ponownie go uruchomiłem, ale nadal nie ma kompresji.
Aktualizacja 2
zdałem sobie sprawę kompresji działa na naszych serwerach nie Azure ale nadal z moim lokalnym IIS.
Zamiast symbolu wieloznacznego dla wszystkich typów, czy wypróbowałeś już określone typy MIME w swojej konfiguracji? – Jasen
@Jasen Tak, mam, niestety bezskutecznie. –