[英]nodejs - hook or injection for http response.write
我正在寻找解决方案,以监视http response.write方法的发送/写入过程。
我希望能够监视和停止正在运行的进程,当一个事件(对于我来说是带有安全令牌的第二个请求)出现(或不出现)时。
通常这是可能的吗?如果可以,那么有人能为我提供一些安全的代码吗?
这是代码行中的一杯咖啡
if req.headers.range?
console.log "serve range request from cache"
# browser wants chunged transmission
range = req.headers.range
parts = range.replace(/bytes=/, "").split "-"
partialstart = parts[0]
partialend = parts[1]
total = file.length
start = parseInt partialstart, 10
end = if partialend then parseInt partialend, 10 else total - 1
header["Content-Range"] = "bytes #{start}-#{end}/#{total}"
header["Accept-Ranges"] = "bytes"
header["Content-Length"]= (end-start)+1
header['Transfer-Encoding'] = 'chunked'
header["Connection"] = "close"
res.writeHead 206, header
# yeah I dont know why i have to append the '0'
# but chrome wont work unless i do
res.write file.slice(start, end)+'0', "binary"
else
console.log "serve normal request from cache"
# reply to normal un-chunked request
res.writeHead 200, header
res.write file, "binary"
console.log err if err
res.end()
有没有办法将res.write文件和“二进制”行包装成某种可以杀死的函数或处理程序?
亲切的问候
当然。 您可以执行以下操作:
origWrite = res.write
res.write = function(buffer, encoding) {
// do some monitoring, starting, stopping, whatever you like
retval = origWrite(buffer, encoding);
// do some more monitoring, starting, stopping, whatever you like
return retval;
}
将此代码放在快速堆栈顶部的中间件中,这样您就可以监视所有中间件的所有写入,而不仅仅是您自己的。
另一件事:
在代码中,指定Content-Length
和Transfer-Encoding: chunked
。 两者不在一起。 chunked
是为什么Chrome(和其他任何浏览器...)最后希望为0
的原因:分段编码以“块”形式出现,每个块均以其长度的ASCII十六进制表示形式开头。 事物以一个空块结尾(即:长度为0的无数据块)。 您还应该在此之后添加CR-LF。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.