node.js - 为在 Azure 上运行的 Node 应用程序启用 gzip

标签 node.js azure gzip

我有一个带有 React 前端的 Node 应用程序,作为 Azure 应用服务在 Node 14 上运行。

该应用程序由一个中间人 Node 服务器(在端口 3000 上,在 Express 上运行)和一个 React 前端组成,该服务器将所有 API 请求路由到另一个服务(在单独的 Azure 应用服务上运行的 .Net 应用程序)。用户与之交互(在端口 3001 上运行)。一切似乎都工作正常 - 本地开发环境和 Azure 服务都按其应有的方式处理 API 请求。

然而,仔细观察一下,本地开发环境(通常在 Mac 上运行)似乎正在压缩来自 API 的所有响应,而 Azure 服务则不然。这导致中间人服务器在 Azure 中运行时发送到前端 React 应用程序的数据大小比在本地运行时增加约 90%。例如,我们的一个 API 调用在本地运行时返回约 33kB 的响应,但相同的请求返回约 500kB 的响应。

我尝试指定 Accept-EncodingContent-Type header ,但这没有效果。

我最初的想法是,Azure 服务的配置与本地服务不同,并且 Azure 不支持 gzip 压缩,或者尚未明确启用 gzip 压缩。或者,Azure 实例可能会通过某种剥离内容编码 header 的网关?

有人知道我应该如何让 Azure 发送压缩响应吗?

最佳答案

事实证明,我错过了一个小(但至关重要)的步骤:在 Express 服务器上启用压缩。

安装并导入压缩包,并将以下内容添加到我们的服务器代码中解决了该问题:

app.use(compression());

如果没有这个,本地运行的前端将提供压缩数据,而不是 Azure 部署的版本。

关于node.js - 为在 Azure 上运行的 Node 应用程序启用 gzip,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69364689/

相关文章:

javascript - Sails.js 升级到 0.10.x 后如何显示我的 404 页面?

javascript - 私有(private) NPM : How can the latest version of a module be installed?

azure - 使用函数中的值设置 AzApiManagementPolicy

gzip - 浏览器发送但服务器未接收到的 Accept-Encoding header

javascript - Express js 中的 async.waterfall 方法

Azure 通配符子域

asp.net - 将 ASP.NET 应用程序移植到 Azure 是一个多大的挑战?

python - 想要为两个文件添加时间戳

记录响应正文(反向代理)时的 Golang DumpResponse gzip 问题

node.js - 保持 Node JS 应用程序运行