diff --git a/lib/adapters/http.js b/lib/adapters/http.js index e0efc409..6337bf33 100755 --- a/lib/adapters/http.js +++ b/lib/adapters/http.js @@ -912,7 +912,7 @@ export default isHttpAdapterSupported && }); responseStream.on('error', function handleStreamError(err) { - if (req.destroyed) return; + if (rejected) return; reject(AxiosError.from(err, null, config, lastRequest, response)); }); diff --git a/tests/unit/adapters/http.test.js b/tests/unit/adapters/http.test.js index 50f9ba90..7d83281d 100644 --- a/tests/unit/adapters/http.test.js +++ b/tests/unit/adapters/http.test.js @@ -823,6 +823,28 @@ describe('supports http with nodejs', () => { await stopHTTPServer(server); } }); + + it('should reject when the server aborts mid-stream and maxRedirects is 0', async () => { + const server = await startHTTPServer( + async (req, res) => { + res.setHeader('Content-Encoding', type); + res.setHeader('Transfer-Encoding', 'chunked'); + res.removeHeader('Content-Length'); + res.write(await zipped); + setTimeout(() => res.socket.destroy(), 10); + }, + { port: SERVER_PORT } + ); + + try { + await assert.rejects( + axios.get(`http://localhost:${server.address().port}`, { maxRedirects: 0 }), + (err) => err && err.code === 'ECONNRESET' + ); + } finally { + await stopHTTPServer(server); + } + }); }); } });