Browse Source

Avoided sending empty chunkedEncoding chunks in the middle of http responses

v0.7.4-release
Sam Hughes 15 years ago
committed by Ryan Dahl
parent
commit
895f89d62a
  1. 13
      lib/http.js
  2. 40
      test/simple/test-http-write-empty-string.js

13
lib/http.js

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

40
test/simple/test-http-write-empty-string.js

@ -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");
});
});
Loading…
Cancel
Save