Transfer-Encoding: chunkedのメモ
ふとchunkedの挙動が気になったので調べたメモ。nodeのhttpはデフォルトでTransfer-Encoding: chunkedになってる。
require('http').createServer(function(req, res) { res.writeHead(200, {'content-type': 'text/html' }); res.write('<style>body{background:red}</style>\n'); res.write('<body>\n'); setTimeout(function() { res.write('foo\n'); setTimeout(function() { res.end('bar\n'); }, 1000); }, 1000); }).listen(8000);
これで最初背景赤くなって一秒後foo、二秒後barってでるかなーと思ったけど2秒後に一気に出力されて全然chunkedじゃなかった(Chrome13, Firefox6)。curlではちゃんと順番に表示されるのを確認した。
調べたらIE以外は1024byte受信後(か全データ受信後)じゃないとレンダリングを開始しないということがわかったので
res.write(new Array(1024).join(' '));
というのをstyleの前に追加したら期待する挙動になった。