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请求不包含范围标题。