-
-
Notifications
You must be signed in to change notification settings - Fork 11.6k
Using config.beforeRedirect prevents using proxy on redirected requests #4703
Copy link
Copy link
Closed
Description
Describe the bug
The support for config.beforeRedirect introduced a regression of #3369 when both config.beforeRedirect and a proxy are used. Both of them internally set options.beforeRedirect. Moreover, config.beforeRedirect is not re-applied on subsequent redirections.
To Reproduce
Adding the following test in test/unit/adapters/http.js
it('should support beforeRedirect and proxy with redirect', function (done) {
var requestCount = 0;
var totalRedirectCount = 5;
server = http.createServer(function (req, res) {
requestCount += 1;
if (requestCount <= totalRedirectCount) {
res.setHeader('Location', 'http://localhost:4444');
res.writeHead(302);
}
res.end();
}).listen(4444, function () {
var proxyUseCount = 0;
proxy = http.createServer(function (request, response) {
proxyUseCount += 1;
var parsed = url.parse(request.url);
var opts = {
host: parsed.hostname,
port: parsed.port,
path: parsed.path
};
http.get(opts, function (res) {
response.writeHead(res.statusCode, res.headers);
res.on('data', function (data) {
response.write(data)
});
res.on('end', function () {
response.end();
});
});
}).listen(4000, function () {
var configBeforeRedirectCount = 0;
axios.get('http://localhost:4444/', {
proxy: {
host: 'localhost',
port: 4000
},
maxRedirects: totalRedirectCount,
beforeRedirect: function (options) {
configBeforeRedirectCount += 1;
}
}).then(function (res) {
assert.equal(totalRedirectCount, configBeforeRedirectCount, 'should invoke config.beforeRedirect option on every redirect');
assert.equal(totalRedirectCount + 1, proxyUseCount, 'should go through proxy on every redirect');
done();
}).catch(done);
});
});
});Expected behavior
The test should pass, but currently 'should go through proxy on every redirect' assertion fails.
Environment
- Axios Version
0.27.2 - Adapter
HTTP - Browser
N/A - Browser Version
N/A - Node.js Version
N/A - OS:
N/A - Additional Library Versions
N/A
Additional context/Screenshots
I'm working on a small PR to fix this issue.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels