该代码是否有效HTTP/1.1?
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')
Run Code Online (Sandbox Code Playgroud)
我想我在这里违反了HTTP/1.1?文本文件确实可以正常工作,但这可能是巧合.我的标题是"200 OK"还是需要它为"100"?一个标题是否足够?
当我尝试利用http流连接由于某种原因写入不会刷新,直到我调用response.end()
我直接从演示中获取代码,并不明白我的问题是什么.
当我卷曲到服务器时,我的标题是正确的.
HTTP/1.1 200 OK
Content-Type: text/plain
Connection: keep-alive
Transfer-Encoding: chunked
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.write('hello');
res.write(':');
setTimeout(function(){
res.end('World\n')},
2000);
}).listen(1337, "127.0.0.1");
console.log('Server running at http://127.0.0.1:1337/');
Run Code Online (Sandbox Code Playgroud)
为什么服务器不发送写入数据?
我有一台服务器,它可以在大约 15 秒内传输处理数据。标题如下:
Content-Type:text/plain; charset=utf-8
Transfer-Encoding:chunked
Run Code Online (Sandbox Code Playgroud)
通过 telnet,我可以确认数据在 15 秒内连续发送。在浏览器中,整个页面会挂起,直到收到整个请求,然后立即呈现所有内容。
有时,对于较长的请求,它会挂起一段时间,然后在数据到达时开始将数据流式传输到屏幕,但我还没有推断出发生这种情况的阈值。
我是否可以发送一些标头或其他魔法,以使浏览器在内容可用时立即呈现内容?