我可以限制 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.
的官方文档
我有一个 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.