1

我有一个 Node.js 服务器通过 HTTPS 提供(相当大的)文件。使用“普通”HTTPS 客户端时,一切都按预期工作。但我的主要用例是将这些文件提供给嵌入式系统(大文件是固件映像)。

嵌入式系统使用 mbedTLS 库创建与我的 Node 服务器的安全 SSL/TLS 连接,并发送 HTTPS 请求以下载文件。服务器以八位字节流的形式忠实地回答 HTTP 正文中的文件。

async function createServer({ port, keys, cert }) {
  const app = express()
  app.use('/', express.static('images'))

  https.createServer({ key: keys.privateKey, cert }, app).listen(port, '0.0.0.0')
}

问题:由于嵌入式系统的内存限制,我的客户端的最大消息缓冲区大小为 4096 字节。但是服务器以更大的块发送数据(例如,每条消息 16408 字节)。由于缓冲区较小,mbedTLS 无法处理这些大消息,并拒绝解密数据。

我可以以某种方式告诉 Node 限制它可以在一条 TLS 消息中发送的数据量吗?

4

1 回答 1

3

您是否尝试过highWaterMark像这样传递选项:

function createServer({ port, keys, cert }) {
  const app = express()
  app.use('/', express.static('images', { highWaterMark: 1024 * 4 }))

  https.createServer({ key: keys.privateKey, cert }, app).listen(port, '0.0.0.0')
}

传递给的选项express.static将传递给fs.createReadStream内部创建的底层。看看fs.createReadStream 这里的官方文档。

于 2018-01-25T18:11:24.880 回答