mirror of
https://github.com/tenrok/axios.git
synced 2026-06-20 20:00:40 +03:00
fix(fetch-adapter): set User-Agent header to match http adapter (#10772)
The fetch adapter was not setting a User-Agent header, causing requests to use Node.js's default 'node' user agent instead of 'axios/<version>'. This mirrors the existing behavior in the HTTP adapter. Fixes #7494 Co-authored-by: Ofek Danny <ofek@kaps.co.il> Co-authored-by: Jay <jasonsaayman@gmail.com>
This commit is contained in:
@@ -12,6 +12,7 @@ import {
|
|||||||
import resolveConfig from '../helpers/resolveConfig.js';
|
import resolveConfig from '../helpers/resolveConfig.js';
|
||||||
import settle from '../core/settle.js';
|
import settle from '../core/settle.js';
|
||||||
import estimateDataURLDecodedBytes from '../helpers/estimateDataURLDecodedBytes.js';
|
import estimateDataURLDecodedBytes from '../helpers/estimateDataURLDecodedBytes.js';
|
||||||
|
import { VERSION } from '../env/data.js';
|
||||||
|
|
||||||
const DEFAULT_CHUNK_SIZE = 64 * 1024;
|
const DEFAULT_CHUNK_SIZE = 64 * 1024;
|
||||||
|
|
||||||
@@ -277,6 +278,9 @@ const factory = (env) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Set User-Agent header if not already set (fetch defaults to 'node' in Node.js)
|
||||||
|
headers.set('User-Agent', 'axios/' + VERSION, false);
|
||||||
|
|
||||||
const resolvedOptions = {
|
const resolvedOptions = {
|
||||||
...fetchOptions,
|
...fetchOptions,
|
||||||
signal: composedSignal,
|
signal: composedSignal,
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import stream from 'stream';
|
|||||||
import { AbortController } from 'abortcontroller-polyfill/dist/cjs-ponyfill.js';
|
import { AbortController } from 'abortcontroller-polyfill/dist/cjs-ponyfill.js';
|
||||||
import util from 'util';
|
import util from 'util';
|
||||||
import NodeFormData from 'form-data';
|
import NodeFormData from 'form-data';
|
||||||
|
import { VERSION } from '../../../lib/env/data.js';
|
||||||
|
|
||||||
const SERVER_PORT = 8010;
|
const SERVER_PORT = 8010;
|
||||||
const LOCAL_SERVER_URL = `http://localhost:${SERVER_PORT}`;
|
const LOCAL_SERVER_URL = `http://localhost:${SERVER_PORT}`;
|
||||||
@@ -619,6 +620,52 @@ describe.runIf(typeof fetch === 'function')('supports fetch with nodejs', () =>
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('fetch adapter - User-Agent header', () => {
|
||||||
|
it('should set User-Agent header to axios/<version> by default', async () => {
|
||||||
|
const server = await startHTTPServer(
|
||||||
|
(req, res) => {
|
||||||
|
res.setHeader('Content-Type', 'application/json');
|
||||||
|
res.end(JSON.stringify({ userAgent: req.headers['user-agent'] }));
|
||||||
|
},
|
||||||
|
{ port: SERVER_PORT }
|
||||||
|
);
|
||||||
|
|
||||||
|
try {
|
||||||
|
const { data } = await fetchAxios.post(`http://localhost:${server.address().port}/`, {
|
||||||
|
payload: 'test',
|
||||||
|
});
|
||||||
|
|
||||||
|
assert.strictEqual(data.userAgent, `axios/${VERSION}`);
|
||||||
|
} finally {
|
||||||
|
await stopHTTPServer(server);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should not override a user-provided User-Agent header', async () => {
|
||||||
|
const customUA = 'my-custom-agent/1.0';
|
||||||
|
|
||||||
|
const server = await startHTTPServer(
|
||||||
|
(req, res) => {
|
||||||
|
res.setHeader('Content-Type', 'application/json');
|
||||||
|
res.end(JSON.stringify({ userAgent: req.headers['user-agent'] }));
|
||||||
|
},
|
||||||
|
{ port: SERVER_PORT }
|
||||||
|
);
|
||||||
|
|
||||||
|
try {
|
||||||
|
const { data } = await fetchAxios.post(
|
||||||
|
`http://localhost:${server.address().port}/`,
|
||||||
|
{ payload: 'test' },
|
||||||
|
{ headers: { 'User-Agent': customUA } }
|
||||||
|
);
|
||||||
|
|
||||||
|
assert.strictEqual(data.userAgent, customUA);
|
||||||
|
} finally {
|
||||||
|
await stopHTTPServer(server);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe('env config', () => {
|
describe('env config', () => {
|
||||||
it('should respect env fetch API configuration', async () => {
|
it('should respect env fetch API configuration', async () => {
|
||||||
const { data, headers } = await fetchAxios.get('/', {
|
const { data, headers } = await fetchAxios.get('/', {
|
||||||
|
|||||||
Reference in New Issue
Block a user