diff --git a/request.js b/request.js index 813882f85..d97adbc69 100644 --- a/request.js +++ b/request.js @@ -587,7 +587,8 @@ Request.prototype.init = function (options) { self.src = src if (isReadStream(src)) { if (!self.hasHeader('content-type')) { - self.setHeader('Content-Type', mime.lookup(src.path)) + // @note fallback to 'application/octet-stream' if mime.lookup returns `false` + self.setHeader('Content-Type', mime.lookup(src.path) || 'application/octet-stream') } } else { if (src.headers) { @@ -897,6 +898,8 @@ Request.prototype.start = function () { if (Array.isArray(self.blacklistHeaders) && self.blacklistHeaders.length) { self.blacklistHeaders.forEach(function (header) { self.req.removeHeader(header) + // also remove from the `self` for the consistency + self.removeHeader(header) }) } } catch (err) { diff --git a/tests/raw.file b/tests/raw.file new file mode 100644 index 000000000..980a0d5f1 --- /dev/null +++ b/tests/raw.file @@ -0,0 +1 @@ +Hello World! diff --git a/tests/test-body.js b/tests/test-body.js index dc482125a..3659a9a92 100644 --- a/tests/test-body.js +++ b/tests/test-body.js @@ -4,6 +4,8 @@ var server = require('./server') var request = require('../index') var tape = require('tape') var http = require('http') +var path = require('path') +var fs = require('fs') var s = server.createServer() @@ -127,6 +129,25 @@ addTest('testPutMultipartPostambleCRLF', { ] }) +tape('testBinaryFile', function (t) { + var server = http.createServer() + server.on('request', function (req, res) { + req.pipe(res) + }) + server.listen(0, function () { + request({ + uri: 'http://localhost:' + this.address().port, + method: 'POST', + body: fs.createReadStream(path.join(__dirname, 'raw.file')) + }, function (err, res, body) { + t.error(err) + // defaults to 'application/octet-stream' content-type + t.equal(res.request.headers['Content-Type'], 'application/octet-stream') + server.close(t.end) + }) + }) +}) + tape('typed array', function (t) { var server = http.createServer() server.on('request', function (req, res) {