我可以限制 Node.js / express.js 中 TLS 消息的长度吗?

Can I limit the length of the TLS messages in Node.js / express.js?

我有一个 Node.js 服务器通过 HTTPS 服务(相当大的)文件。使用 "normal" HTTPS 客户端时,一切正常。但我的主要用例是将这些文件提供给嵌入式系统(大文件是固件映像)。

嵌入式系统使用 mbedTLS 库创建到我的节点服务器的安全 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 消息中发送的数据量吗?

您是否试过像这样传递 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 here.

的官方文档