【问题标题】:Enabling http compression with express使用 express 启用 http 压缩
【发布时间】:2017-09-24 14:50:37
【问题描述】:

我在搞乱 Darksky API 并在它声明的查询参数之一下:

extend=每小时可选

如果存在,则返回接下来 168 小时的逐小时数据,而不是 下 48 个。使用此选项时,我们强烈建议启用 HTTP 压缩。

我使用 Express 作为节点代理,它访问 Darksky api(即 localhost:3000/api/forecast/LATITUDE、LONGITUDE)。

“HTTP 压缩”是什么意思,我将如何启用它?

【问题讨论】:

  • 很多时候,建议把你的 NodeJS express 服务器放在 NGINX 服务器后面。 NGINX 服务器的压缩性能非常好。

标签: javascript node.js express


【解决方案1】:

这里压缩是指gzipexpress服务器上的压缩。您可以使用 compression 中间件向您的服务器添加简单的 gzip 压缩。

在此处阅读有关如何安装该中间件的更多信息。 https://github.com/expressjs/compression

示例实现应如下所示。

var compression = require('compression')
var express = require('express')

var app = express()

// compress all responses
app.use(compression())

// add all routes

【讨论】:

    【解决方案2】:

    引用https://darksky.net/dev/docs

    预测数据 API 支持 HTTP 压缩。我们衷心推荐使用它,因为它会使网络上的响应小得多。要启用它,只需在您的请求中添加一个 Accept-Encoding: gzip 标头。 (大多数 HTTP 客户端库都为您包装了此功能,有关详细信息,请参阅您的库的文档。)

    我不熟悉 Dark Sky API,但我想它会返回大量高度冗余的数据,这是压缩的理想选择。如上所述,HTTP 请求通过Accept-Encoding 内置了压缩机制。

    在您的情况下,数据将通过网络传输两次,一次从 Dark Sky 到您的服务器,然后再次从您的服务器到您的最终用户。您可以只压缩这两种传输中的一种,也可以同时压缩两者,这取决于您,但您可能需要同时压缩这两种传输,除非最终用户与您的服务器位于同一本地网络上。

    关于发出压缩请求有各种 SO 问题,例如:

    node.js - easy http requests with gzip/deflate compression

    您的关键决定是您是要解压缩并重新压缩代理中的数据,还是只是将其流式传输。如果您不需要服务器中数据的解压缩副本,那么跳过额外步骤会更有效。您需要小心确保所有标头都设置正确,但如果您只是传递收到的相关标头(双向),则通过管道传递来自 Dark Sky 的响应应该相对简单。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-30
      • 2023-03-07
      • 1970-01-01
      • 2019-04-13
      • 2019-01-06
      • 2012-05-12
      • 1970-01-01
      • 2012-09-21
      相关资源
      最近更新 更多