该代码是否为有效的HTTP/1.1?Node.js:分块传输编码
var fs = require('fs')
var http = require('http')
var buf=function(res,fd,i,s,buffer){
if(i+buffer.length<s){
fs.read(fd,buffer,0,buffer.length,i,function(e,l,b){
res.write(b.slice(0,l))
//console.log(b.toString('utf8',0,l))
i=i+buffer.length
buf(res,fd,i,s,buffer)
})
}
else{
fs.read(fd,buffer,0,buffer.length,i,function(e,l,b){
res.end(b.slice(0,l))
fs.close(fd)
})
}
}
var app = function(req,res){
var head={'Content-Type':'text/html; charset=UTF-8'}
switch(req.url.slice(-3)){
case '.js':head={'Content-Type':'text/javascript'};break;
case 'css':head={'Content-Type':'text/css'};break;
case 'png':head={'Content-Type':'image/png'};break;
case 'ico':head={'Content-Type':'image/x-icon'};break;
case 'ogg':head={'Content-Type':'audio/ogg'};break;
case 'ebm':head={'Content-Type':'video/webm'};break;
}
head['Transfer-Encoding']='chunked'
res.writeHead(200,head)
fs.open('.'+req.url,'r',function(err,fd){
fs.fstat(fd,function(err, stats){
console.log('.'+req.url+' '+stats.size+' '+head['Content-Type']+' '+head['Transfer-Encoding'])
var buffer = new Buffer(100)
buf(res,fd,0,stats.size,buffer)
})
})
}
http.createServer(app).listen(8000,"127.0.0.1")
console.log('GET http://127.0.0.1:8000/appwsgi/www/index.htm')
我想我在这里违反了HTTP/1.1?文本文件似乎工作正常,但这可能是巧合。我的标题是“200 OK”还是需要它为“100”?一个头是否足够?
这是令人困惑的,因为在发送分块软件包时,响应是否需要为200? – 2011-06-04 00:20:07
@Gert从谷歌阅读标题我发布在我的回复中,其中有200 OK。当然,如果你正在重定向,或者“是的,我现在有这个文件在这里,然后将它发送给你”类型的情况之外,你应该使用适当的头。我建议看看所有的头文件和它们代表什么:http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html。如果你想继续像这样在一个低级别上使用node.js,这将对你有益。 – 2011-06-04 00:25:48