From e43baaa5cd961335f0943ae5bd4e8fe866ba1fa9 Mon Sep 17 00:00:00 2001 From: Alexandre Tiertant Date: Tue, 10 Jan 2017 17:53:08 +0100 Subject: [PATCH 1/2] handle gzip --- src/main.js | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/src/main.js b/src/main.js index 1ee2ad6..cb4f0bd 100644 --- a/src/main.js +++ b/src/main.js @@ -23,29 +23,30 @@ function bufferToString(buffer) { * @return {Object} result {headers: {Status: 200, 'content-type': 'text/html'}, body: 'xxxx'} */ function parse(buffer) { - var source = bufferToString(buffer); + var source = Buffer.concat(buffer); // http spec: use `\r\n` as line break, except body var result = {}; - var lines = source.split('\r\n'); - var line; // headers var headers = {}; - while (lines.length) { - line = lines.shift(); - if (line) { - line = line.split(':'); - headers[line[0]] = line[1]; - } - else { - break; + var start = 0; + for (var i=0; i < source.length; i++) { + // check for `\r\n + if (source[i] === 13 && source[i+1] === 10) { + var line = source.slice(start, i-1).toString(); + var c = line.split(': '); + if (c[0] !== '' && c.length === 2) { + headers[c[0]] = c[1]; + } + start = i+2; } } + result.headers = headers; // body // if body has `\r\n`, join it back to the body string - result.body = lines.join('\r\n'); + result.body = source.slice(start, source.length); return result; } @@ -98,10 +99,11 @@ exports = module.exports = function (options) { var end = options.end || function (e) { var statusCode = e.statusCode; var headers = e.headers; - var body = e.body || ''; + var body = e.body || Buffer.from('', 'utf8'); res.writeHead(statusCode, headers); - res.end(body); + res.write(body, 'binary'); + res.end(); }; var info = url.parse(req.url); From 6bd949bc94dc57d82b93dca0049f3842e6a52732 Mon Sep 17 00:00:00 2001 From: Alexandre Tiertant Date: Thu, 19 Jan 2017 16:08:07 +0100 Subject: [PATCH 2/2] Update main.js --- src/main.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.js b/src/main.js index cb4f0bd..d3e44d8 100644 --- a/src/main.js +++ b/src/main.js @@ -33,7 +33,7 @@ function parse(buffer) { for (var i=0; i < source.length; i++) { // check for `\r\n if (source[i] === 13 && source[i+1] === 10) { - var line = source.slice(start, i-1).toString(); + var line = source.slice(start, i).toString(); var c = line.split(': '); if (c[0] !== '' && c.length === 2) { headers[c[0]] = c[1];