如何检查实际内容长度与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。 只要意识到,如果你在其他地方的缓冲区工作。