video请求中缺less范围标题?

我有时在我的Node.js服务器上得到一个错误,告诉我req.headers.range是不确定的,当用户请求.mp4 (我还没有尝试服务任何其他video文件types,不知道如果mp4是相关的)。 我不明白为什么这个标题丢失。

应该为video的请求标头有时排除range

我发送这样的stream:

 var videoReqHandler = function(req, res, pathname) { var file = dirPath + "/Client" + pathname; var range = req.headers.range; var positions = range.replace(/bytes=/, "").split("-"); var start = parseInt(positions[0], 10); fs.stat(file, function(err, stats) { if (err) { throw err; } else { var total = stats.size; var end = positions[1] ? parseInt(positions[1], 10) : total - 1; var chunksize = (end - start) + 1; res.writeHead(206, { "Content-Range" : "bytes " + start + "-" + end + "/" + total, "Accept-Ranges" : "bytes", "Content-Length" : chunksize, "Content-Type" : "video/mp4" }); var stream = fs.createReadStream(file, { start : start, end : end }).on("open", function() { stream.pipe(res); }).on("error", function(err) { res.end(err); }); } }); }; 

错误:

 /video_stream.js:21 var positions = range.replace(/bytes=/, "").split("-"); TypeError: Cannot call method 'replace' of undefined 

Range标题是可选的:

使用条件或无条件GET方法的HTTP检索请求可以使用Range请求标头( http://www.w3.org/Protocols/rfc2616/rfc2616-sec14)请求实体的一个或多个子范围,而不是整个实体.html#sec14.35.2 )

如果请求是针对videostream,则无关紧要。 我假设浏览器(或video播放器库)不会为初始请求发送Range标头,而只是在search时使用它。

您应该确保您正在响应GET请求。 这可能是浏览器正在发送一个HEAD请求来获取文件信息。 HEAD请求不包含范围标题。