Avoided sending empty chunkedEncoding chunks in the middle of http responses

This commit is contained in:
Sam Hughes 2010-04-28 19:25:43 -07:00 committed by Ryan Dahl
parent 15ec99ec59
commit 895f89d62a
2 changed files with 46 additions and 7 deletions

View File

@ -392,14 +392,13 @@ OutgoingMessage.prototype.write = function (chunk, encoding) {
encoding = encoding || "ascii";
if (this.chunkedEncoding) {
if (typeof chunk == 'string') {
this._send(process._byteLength(chunk, encoding).toString(16));
} else {
this._send(chunk.length.toString(16));
var chunkLength = (typeof chunk == 'string' ? process._byteLength(chunk, encoding) : chunk.length);
if (chunkLength > 0) {
this._send(chunkLength.toString(16));
this._send(CRLF);
this._send(chunk, encoding);
this._send(CRLF);
}
this._send(CRLF);
this._send(chunk, encoding);
this._send(CRLF);
} else {
this._send(chunk, encoding);
}

View File

@ -0,0 +1,40 @@
PORT = 8000;
sys = require('sys');
http = require('http');
assert = require('assert');
server = http.createServer(function (request, response) {
sys.puts('responding to ' + request.url);
response.writeHead(200, {'Content-Type': 'text/plain'});
response.write('1\n');
response.write('');
response.write('2\n');
response.write('');
response.end('3\n');
this.close();
})
server.listen(PORT);
var response="";
process.addListener('exit', function () {
assert.equal('1\n2\n3\n', response);
});
server.addListener('listening', function () {
var client = http.createClient(PORT);
var req = client.request("/");
req.end();
req.addListener('response', function (res) {
assert.equal(200, res.statusCode);
res.setEncoding("ascii");
res.addListener('data', function (chunk) {
response += chunk;
});
sys.error("Got /hello response");
});
});