From 0696b20a049683e3a8e777dc30a496394f1eb32d Mon Sep 17 00:00:00 2001 From: Maciej Goszczycki Date: Sun, 26 Jul 2020 14:11:05 +0200 Subject: [PATCH] Handle zero-length OK deflate responses --- src/index.js | 7 +++++++ test/server.js | 7 +++++++ test/test.js | 11 +++++++++++ 3 files changed, 25 insertions(+) diff --git a/src/index.js b/src/index.js index 8bf9248fd..bde601a37 100644 --- a/src/index.js +++ b/src/index.js @@ -254,6 +254,13 @@ export default function fetch(url, opts) { response = new Response(body, response_options); resolve(response); }); + raw.on('end', () => { + // some old IIS servers return zero-length OK deflate responses, so 'data' is never emitted. + if (!response) { + response = new Response(body, response_options); + resolve(response); + } + }) return; } diff --git a/test/server.js b/test/server.js index 06c715d65..a55814d7f 100644 --- a/test/server.js +++ b/test/server.js @@ -115,6 +115,13 @@ export default class TestServer { }); } + if (p === '/empty/deflate') { + res.statusCode = 200; + res.setHeader('Content-Type', 'text/plain'); + res.setHeader('Content-Encoding', 'deflate'); + res.end(); + } + if (p === '/sdch') { res.statusCode = 200; res.setHeader('Content-Type', 'text/plain'); diff --git a/test/test.js b/test/test.js index c5d61c72a..e83e1555f 100644 --- a/test/test.js +++ b/test/test.js @@ -679,6 +679,17 @@ describe('node-fetch', () => { }); }); + it('should handle empty deflate response', function() { + const url = `${base}empty/deflate`; + return fetch(url).then(res => { + expect(res.headers.get('content-type')).to.equal('text/plain'); + return res.text().then(result => { + expect(result).to.be.a('string'); + expect(result).to.be.empty; + }); + }); + }); + it('should decompress brotli response', function() { if(typeof zlib.createBrotliDecompress !== 'function') this.skip(); const url = `${base}brotli`;