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 中使用基于服务器的响应压缩技术,其中中间件的性能可能无法与服务器模块相匹配。当您无法使用以下内容时,请使用 Response Compression 中间件:
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
。
更新
我尝试在IIS中安装动态HTTP压缩,因为默认情况下未安装。在我看来,我正在尝试提供静态内容服务,但我认为值得一试。 我验证了IIS管理器中启用了静态和动态内容压缩,但是我重新运行后仍旧没有压缩。
更新2
我意识到压缩已经在我们的Azure服务器上运行,但在我的本地IIS上仍然无法使用。