如何检查实际内容长度与Content-Length标题?

用户可以将文档发布到我们的Web服务。 我们把它stream到别处。 但是,在stream媒体播放的最后,我们需要确定他们没有说谎他们的内容长度。

我假设,如果headerContentLength > realContentLength ,请求将只是等待他们发​​送其余的,最终超时。 所以这可能是好的。

那么如果headerContentLength < realContentLength ? 也就是说,如果他们说完成后继续发送数据呢?

这是由Node.js以任何方式照顾? 如果没有,检查什么是好方法? 我想我可以只计数一些data事件监听器里面的字节—例如, req.on("data", function (chunk) { totalBytes += chunk.length; }) 。 这似乎是一个杂凑虽然。

要检查请求的实际长度,您必须自行添加它。 data块是Buffer s,它们有一个可以加起来的.length属性。

如果使用request.setEncoding()指定编码,则data块将是String s。 在这种情况下,调用Buffer.byteLength(chunk)来获得长度。 ( Buffer是节点中的全局对象。)

把每个块的总和加起来,你就知道有多less数据被发送了。 这是一个粗略的(未经testing的)例子:

 https.createServer(function(req, res) { var expected_length = req.headers['content-length']; // I think this is a string ;) var actual_length = 0; req.on('data', function (chunk) { actual_length += chunk.length; }); req.on('end', function() { console.log('expected: ' + expected_length + ', actual: ' + actual_length); }); }); 

注意: length是指Buffer的内容的最大长度,而不是实际的长度。 但是,它在这种情况下工作,因为块缓冲区总是以正确的长度创build。 只要意识到,如果你在其他地方的缓冲区工作。