Node.js cuts off files when serving over HTTPS


I am trying to serve some JavaScript files with Node.js and for whatever reason the files are being cut off in the middle of the transmission. The code:

httpsServer = http.createServer(function(req, res) {
var path = url.parse(req.url).pathname;

if (path[path.length - 1] == '/') {
path += 'index.html';

fs.readFile(root + path, function(err, data){
if (err) return send404(res);

res.writeHead(200, {
'Content-Type': getMimeType(getExtension(path)),
'Content-Length': data.length});


var privateKey = fs.readFileSync(settings.PRIVATE_KEY).toString();
var certificate = fs.readFileSync(settings.CERTIFICATE).toString();

var credentials = crypto.createCredentials({key: privateKey, cert: certificate});

The files and The first one is cut off at exactly 32KB and the second at exactly 16KB. This does not happen over HTTP, only HTTPS and only over a network (e.g.: not from localhost).

Any help would be really appreciated.

Problem courtesy of: ipartola


Instead of Content-Length: data.length you should use Content-Length: Buffer.byteLength(data, 'utf8') where Bufferis a global object (node 0.3.x) or var Buffer = require('buffer') in node 0.2.x which will save you a lot of hassle and might fix your problem with truncated answers too.

Solution courtesy of: tedeh

View additional discussion.