【发布时间】:2020-01-25 14:48:54
【问题描述】:
我有一个在 Azure 应用服务上运行的 ASP.NET Core 2.2 应用程序。
我遇到的问题是应用程序的响应没有被压缩(没有 Content-Encoding 标头)。
我对 App Service 的理解是,我的应用程序会在 IIS 后面运行 Out of Process,所以 IIS 应该是负责压缩响应的东西。我的理解也是,应用服务上的 IIS 应该默认配置为使用 gzip 自动压缩 JavaScript 和 CSS 等文件类型,但是这不会发生。
发送到服务器的请求都有正确的accept-encoding头,所以不是浏览器的问题(我也用多个浏览器检查过)。
我已尝试在web.config 中明确设置 urlCompression:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<urlCompression doStaticCompression="true" doDynamicCompression="true" />
</system.webServer>
</location>
</configuration>
但这没什么区别。
我也尝试将 IIS.Compression.SiteExtension 安装到应用服务,但也没有启用压缩。
我知道我可以在我的应用程序中直接使用Response Compression Middleware,但我更愿意让 IIS 处理它。
简而言之,我的问题是如何让压缩(GZIP 或 Brotli)在应用服务中为我的应用程序工作?
【问题讨论】:
-
您使用的是 HTTPS 吗?由于潜在的 CRIME 和 BREACH 攻击,通过 HTTPS 进行通信时默认禁用压缩。在 ASP.NET Core 中有一种方法可以覆盖,但在 IIS/App 服务端不确定。
-
是的,它通过 HTTPS。我想知道这是否与此有关,但我在任何地方都找不到任何文档来说明 Azure App Service 正在做什么以及如何为某些文件覆盖它(因为我相信 CRIME 和 BREACH 攻击会影响动态生成的内容包含秘密但不是静态的非秘密文件,例如 JS 和 CSS,但如果我错了请纠正我)
-
没有。这与基于压缩工作方式的事实有关,它使 SSL 加密本质上不太安全。这并不意味着您不安全,老实说,我认为现代 TLS 密码 (1.2+) 通常不太容易受到影响。不过,这是一种权衡,您必须决定什么更重要:安全性或客户端必须下载的数据量。
标签: asp.net-core azure-web-app-service asp.net-core-2.2