Http 如何根据内容长度标题检查实际内容长度?
用户可以将文档发布到我们的web服务。我们把它流到别处。但是,在流媒体播放结束时,我们需要确保他们没有在内容长度上撒谎 我假设如果Http 如何根据内容长度标题检查实际内容长度?,http,node.js,Http,Node.js,用户可以将文档发布到我们的web服务。我们把它流到别处。但是,在流媒体播放结束时,我们需要确保他们没有在内容长度上撒谎 我假设如果headerContentLength>realContentLength,请求只会等待他们发送其余的内容,最终超时。所以这可能没问题 如果headerContentLength
headerContentLength>realContentLength
,请求只会等待他们发送其余的内容,最终超时。所以这可能没问题
如果headerContentLengthNode.js是否以任何方式处理了此问题?如果没有,什么是检查的好方法?我想我可以计算一些
data
事件监听器中的字节数,即req.on(“data”,function(chunk){totalBytes+=chunk.length;})
。不过,这似乎是个难题。要检查请求的实际长度,您必须自己加起来。data
块是Buffer
s,它们有一个.length
属性,您可以将其相加
如果使用request.setEncoding()
指定编码,则数据
块将改为字符串
s。在这种情况下,调用Buffer.bytellength(chunk)
获取长度。(Buffer
是节点中的全局对象。)
把每个区块的总数加起来,你就会知道发送了多少数据。
下面是一个粗略(未经测试)的示例:
注意:
length
指的是缓冲区内容的最大长度,而不是实际长度。但是,在这种情况下它是有效的,因为块缓冲区总是以精确正确的长度创建的。如果您在其他地方使用缓冲区,请注意这一点。您是否没有对请求的end
事件执行此检查,因为如果客户端发送的数据超过指定的内容长度
头,您希望立即结束连接?我很乐意在end
事件,但我不知道要访问哪个属性来告诉实际发送了多少字节http.ServerRequest
似乎没有任何此类属性。
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);
});
});