該代碼是否爲有效的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