reflex-search 1.5.2 β 1.5.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/node_modules/.package-lock.json +15 -15
- package/node_modules/axios/CHANGELOG.md +126 -1
- package/node_modules/axios/README.md +390 -257
- package/node_modules/axios/dist/axios.js +511 -154
- package/node_modules/axios/dist/axios.min.js +3 -3
- package/node_modules/axios/dist/axios.min.js.map +1 -1
- package/node_modules/axios/dist/browser/axios.cjs +537 -124
- package/node_modules/axios/dist/esm/axios.js +537 -124
- package/node_modules/axios/dist/esm/axios.min.js +2 -2
- package/node_modules/axios/dist/esm/axios.min.js.map +1 -1
- package/node_modules/axios/dist/node/axios.cjs +753 -226
- package/node_modules/axios/index.d.cts +27 -4
- package/node_modules/axios/index.d.ts +23 -2
- package/node_modules/axios/lib/adapters/adapters.js +1 -1
- package/node_modules/axios/lib/adapters/fetch.js +217 -47
- package/node_modules/axios/lib/adapters/http.js +274 -169
- package/node_modules/axios/lib/adapters/xhr.js +1 -0
- package/node_modules/axios/lib/core/Axios.js +4 -2
- package/node_modules/axios/lib/core/AxiosError.js +13 -1
- package/node_modules/axios/lib/core/AxiosHeaders.js +12 -9
- package/node_modules/axios/lib/core/buildFullPath.js +29 -1
- package/node_modules/axios/lib/core/mergeConfig.js +35 -0
- package/node_modules/axios/lib/defaults/transitional.js +2 -0
- package/node_modules/axios/lib/env/data.js +1 -1
- package/node_modules/axios/lib/helpers/AxiosURLSearchParams.js +1 -3
- package/node_modules/axios/lib/helpers/Http2Sessions.js +119 -0
- package/node_modules/axios/lib/helpers/buildURL.js +7 -4
- package/node_modules/axios/lib/helpers/composeSignals.js +1 -1
- package/node_modules/axios/lib/helpers/cookies.js +5 -1
- package/node_modules/axios/lib/helpers/estimateDataURLDecodedBytes.js +16 -11
- package/node_modules/axios/lib/helpers/formDataToJSON.js +25 -3
- package/node_modules/axios/lib/helpers/formDataToStream.js +2 -2
- package/node_modules/axios/lib/helpers/fromDataURI.js +4 -2
- package/node_modules/axios/lib/helpers/resolveConfig.js +26 -13
- package/node_modules/axios/lib/helpers/shouldBypassProxy.js +33 -1
- package/node_modules/axios/lib/helpers/toFormData.js +48 -12
- package/node_modules/axios/lib/helpers/validator.js +1 -1
- package/node_modules/axios/lib/utils.js +97 -12
- package/node_modules/axios/package.json +29 -13
- package/node_modules/brace-expansion/dist/commonjs/index.js +24 -14
- package/node_modules/brace-expansion/dist/commonjs/index.js.map +1 -1
- package/node_modules/brace-expansion/dist/esm/index.js +24 -14
- package/node_modules/brace-expansion/dist/esm/index.js.map +1 -1
- package/node_modules/brace-expansion/package.json +2 -2
- package/node_modules/form-data/CHANGELOG.md +29 -2
- package/node_modules/form-data/README.md +4 -4
- package/node_modules/form-data/lib/form_data.js +14 -2
- package/node_modules/form-data/package.json +7 -7
- package/node_modules/hasown/CHANGELOG.md +18 -0
- package/node_modules/hasown/eslint.config.mjs +6 -0
- package/node_modules/hasown/package.json +13 -14
- package/npm-shrinkwrap.json +16 -16
- package/package.json +2 -2
- package/node_modules/axios/dist/axios.js.map +0 -1
- package/node_modules/axios/dist/browser/axios.cjs.map +0 -1
- package/node_modules/axios/dist/esm/axios.js.map +0 -1
- package/node_modules/axios/dist/node/axios.cjs.map +0 -1
- package/node_modules/hasown/.eslintrc +0 -5
|
@@ -29,27 +29,10 @@
|
|
|
29
29
|
</td>
|
|
30
30
|
<td align="center" width="50%">
|
|
31
31
|
<a
|
|
32
|
-
href="https://
|
|
33
|
-
style="padding: 10px; display: inline-block"
|
|
32
|
+
href="https://opencollective.com/axios/contribute"
|
|
34
33
|
target="_blank"
|
|
34
|
+
>π Become a sponsor</a
|
|
35
35
|
>
|
|
36
|
-
<img
|
|
37
|
-
width="90px"
|
|
38
|
-
height="90px"
|
|
39
|
-
src="https://images.opencollective.com/hopper-security/c4f7de2/avatar.png"
|
|
40
|
-
alt="Hopper Security"
|
|
41
|
-
/>
|
|
42
|
-
</a>
|
|
43
|
-
<p align="center">
|
|
44
|
-
Hopper provides a secure, open-source registry where every component is verified against malware and continuously remediated for vulnerabilities across all versions. In simple terms, Hopper removes the need to manage software supply chain risk altogether.
|
|
45
|
-
</p>
|
|
46
|
-
<p align="center">
|
|
47
|
-
<a
|
|
48
|
-
href="https://hopper.security/?utm_source=axios&utm_medium=readme_sponsorlist&utm_campaign=sponsorship"
|
|
49
|
-
target="_blank"
|
|
50
|
-
><b>hopper.security</b></a
|
|
51
|
-
>
|
|
52
|
-
</p>
|
|
53
36
|
</td>
|
|
54
37
|
</tr>
|
|
55
38
|
</table>
|
|
@@ -142,7 +125,7 @@
|
|
|
142
125
|
</a>
|
|
143
126
|
<p
|
|
144
127
|
align="center"
|
|
145
|
-
title="Hi, we're Descope! We are building something in the authentication space for app developers and can
|
|
128
|
+
title="Hi, we're Descope! We are building something in the authentication space for app developers and can't wait to place it in your hands."
|
|
146
129
|
>
|
|
147
130
|
Reduce user friction, prevent account takeover, and get a 360Β° view of your customer and agentic identities with the Descope External IAM platform.
|
|
148
131
|
</p>
|
|
@@ -250,7 +233,7 @@
|
|
|
250
233
|
<p
|
|
251
234
|
align="center"
|
|
252
235
|
>
|
|
253
|
-
At Buzzoid, you can buy Instagram followers
|
|
236
|
+
At Buzzoid, you can buy Instagram followers through a short checkout flow with safety controls. Rated world's #1 IG service since 2012.
|
|
254
237
|
</p>
|
|
255
238
|
<p align="center">
|
|
256
239
|
<a
|
|
@@ -288,15 +271,33 @@
|
|
|
288
271
|
</td>
|
|
289
272
|
<td align="center" width="33.333333333333336%">
|
|
290
273
|
<a
|
|
291
|
-
href="https://
|
|
274
|
+
href="https://global.fun88.com/?utm_source=axios_docs_website&utm_medium=website&utm_campaign=axios_open_collective_sponsorship"
|
|
275
|
+
style="padding: 10px; display: inline-block"
|
|
292
276
|
target="_blank"
|
|
293
|
-
>π Become a sponsor</a
|
|
294
277
|
>
|
|
278
|
+
<img
|
|
279
|
+
width="71px"
|
|
280
|
+
height="70px"
|
|
281
|
+
src="https://images.opencollective.com/fun88-official/bf2843c/logo.png"
|
|
282
|
+
alt="Fun 88"
|
|
283
|
+
/>
|
|
284
|
+
</a>
|
|
285
|
+
<p
|
|
286
|
+
align="center"
|
|
287
|
+
>
|
|
288
|
+
Fun88 is a global online gambling and betting brand founded in 2009, offering a wide range of services including sports betting, live casino games, slots, and virtual gaming.
|
|
289
|
+
</p>
|
|
290
|
+
<p align="center">
|
|
291
|
+
<a
|
|
292
|
+
href="https://global.fun88.com/?utm_source=axios_docs_website&utm_medium=website&utm_campaign=axios_open_collective_sponsorship"
|
|
293
|
+
target="_blank"
|
|
294
|
+
><b>global.fun88.com</b></a
|
|
295
|
+
>
|
|
296
|
+
</p>
|
|
295
297
|
</td>
|
|
296
298
|
</tr>
|
|
297
299
|
</table>
|
|
298
300
|
|
|
299
|
-
|
|
300
301
|
<!--<div>marker</div>-->
|
|
301
302
|
|
|
302
303
|
<br><br>
|
|
@@ -315,62 +316,61 @@
|
|
|
315
316
|
<div align="center">
|
|
316
317
|
|
|
317
318
|
[](https://www.npmjs.org/package/axios)
|
|
318
|
-
[](https://cdnjs.com/libraries/axios)
|
|
319
319
|
[](https://github.com/axios/axios/actions/workflows/ci.yml)
|
|
320
320
|
[](https://gitpod.io/#https://github.com/axios/axios)
|
|
321
|
-
[](https://coveralls.io/r/mzabriskie/axios)
|
|
322
321
|
[](https://packagephobia.now.sh/result?p=axios)
|
|
323
322
|
[](https://bundlephobia.com/package/axios@latest)
|
|
324
323
|
[](https://npm-stat.com/charts.html?package=axios)
|
|
325
324
|
[](https://gitter.im/mzabriskie/axios)
|
|
326
325
|
[](https://www.codetriage.com/axios/axios)
|
|
327
326
|
[](CONTRIBUTORS.md)
|
|
327
|
+
[](https://agentfriendlycode.com/repo/32)
|
|
328
328
|
|
|
329
329
|
</div>
|
|
330
330
|
|
|
331
|
-
## Table of
|
|
331
|
+
## Table of contents
|
|
332
332
|
|
|
333
333
|
- [Features](#features)
|
|
334
|
-
- [Browser
|
|
334
|
+
- [Browser support](#browser-support)
|
|
335
335
|
- [Installing](#installing)
|
|
336
336
|
- [Package manager](#package-manager)
|
|
337
337
|
- [CDN](#cdn)
|
|
338
338
|
- [Example](#example)
|
|
339
339
|
- [Axios API](#axios-api)
|
|
340
340
|
- [Request method aliases](#request-method-aliases)
|
|
341
|
-
- [Concurrency
|
|
341
|
+
- [Concurrency](#concurrency-deprecated)
|
|
342
342
|
- [Creating an instance](#creating-an-instance)
|
|
343
343
|
- [Instance methods](#instance-methods)
|
|
344
|
-
- [Request
|
|
345
|
-
- [Response
|
|
346
|
-
- [Config
|
|
344
|
+
- [Request config](#request-config)
|
|
345
|
+
- [Response schema](#response-schema)
|
|
346
|
+
- [Config defaults](#config-defaults)
|
|
347
347
|
- [Global axios defaults](#global-axios-defaults)
|
|
348
348
|
- [Custom instance defaults](#custom-instance-defaults)
|
|
349
349
|
- [Config order of precedence](#config-order-of-precedence)
|
|
350
350
|
- [Interceptors](#interceptors)
|
|
351
|
-
- [Multiple
|
|
352
|
-
- [Handling
|
|
353
|
-
- [Handling
|
|
351
|
+
- [Multiple interceptors](#multiple-interceptors)
|
|
352
|
+
- [Handling errors](#handling-errors)
|
|
353
|
+
- [Handling timeouts](#handling-timeouts)
|
|
354
354
|
- [Cancellation](#cancellation)
|
|
355
355
|
- [AbortController](#abortcontroller)
|
|
356
|
-
- [CancelToken
|
|
356
|
+
- [CancelToken](#canceltoken-deprecated)
|
|
357
357
|
- [Using application/x-www-form-urlencoded format](#using-applicationx-www-form-urlencoded-format)
|
|
358
358
|
- [URLSearchParams](#urlsearchparams)
|
|
359
359
|
- [Query string](#query-string-older-browsers)
|
|
360
|
-
- [
|
|
360
|
+
- [Automatic serialization](#automatic-serialization-to-urlsearchparams)
|
|
361
361
|
- [Using multipart/form-data format](#using-multipartform-data-format)
|
|
362
362
|
- [FormData](#formdata)
|
|
363
|
-
- [
|
|
364
|
-
- [
|
|
365
|
-
- [HTML
|
|
366
|
-
- [
|
|
367
|
-
- [
|
|
368
|
-
- [
|
|
369
|
-
- [
|
|
370
|
-
- [
|
|
371
|
-
- [
|
|
372
|
-
- [
|
|
373
|
-
- [
|
|
363
|
+
- [Automatic serialization](#automatic-serialization-to-formdata)
|
|
364
|
+
- [Posting files](#posting-files)
|
|
365
|
+
- [HTML form posting](#html-form-posting-browser)
|
|
366
|
+
- [Progress capturing](#progress-capturing)
|
|
367
|
+
- [Rate limiting](#rate-limiting)
|
|
368
|
+
- [AxiosHeaders](#axiosheaders)
|
|
369
|
+
- [Fetch adapter](#fetch-adapter)
|
|
370
|
+
- [Custom fetch](#custom-fetch)
|
|
371
|
+
- [Using with Tauri](#using-with-tauri)
|
|
372
|
+
- [Using with SvelteKit](#using-with-sveltekit)
|
|
373
|
+
- [HTTP/2 support](#http2-support)
|
|
374
374
|
- [Semver](#semver)
|
|
375
375
|
- [Promises](#promises)
|
|
376
376
|
- [TypeScript](#typescript)
|
|
@@ -382,17 +382,17 @@
|
|
|
382
382
|
|
|
383
383
|
## Features
|
|
384
384
|
|
|
385
|
-
-
|
|
386
|
-
-
|
|
387
|
-
-
|
|
388
|
-
-
|
|
389
|
-
-
|
|
390
|
-
-
|
|
391
|
-
-
|
|
392
|
-
-
|
|
393
|
-
-
|
|
385
|
+
- Make [XMLHttpRequests](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest) from the browser.
|
|
386
|
+
- Make [http](https://nodejs.org/api/http.html) requests from Node.js.
|
|
387
|
+
- Use the [Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) API for asynchronous request handling.
|
|
388
|
+
- Intercept requests and responses to add custom logic or transform data.
|
|
389
|
+
- Transform request and response data.
|
|
390
|
+
- Cancel requests with built-in cancellation APIs.
|
|
391
|
+
- Serialize and parse [JSON](https://www.json.org/json-en.html) data.
|
|
392
|
+
- Serialize data objects to `multipart/form-data` or `application/x-www-form-urlencoded`.
|
|
393
|
+
- Add client-side protection against [Cross-Site Request Forgery](https://en.wikipedia.org/wiki/Cross-site_request_forgery).
|
|
394
394
|
|
|
395
|
-
## Browser
|
|
395
|
+
## Browser support
|
|
396
396
|
|
|
397
397
|
| Chrome | Firefox | Safari | Opera | Edge |
|
|
398
398
|
| :------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------: |
|
|
@@ -429,7 +429,13 @@ Using bun:
|
|
|
429
429
|
$ bun add axios
|
|
430
430
|
```
|
|
431
431
|
|
|
432
|
-
|
|
432
|
+
Using Deno:
|
|
433
|
+
|
|
434
|
+
```bash
|
|
435
|
+
$ deno add axios
|
|
436
|
+
```
|
|
437
|
+
|
|
438
|
+
Once the package is installed, import it with `import` or `require`:
|
|
433
439
|
|
|
434
440
|
```js
|
|
435
441
|
import axios, { isCancel, AxiosError } from 'axios';
|
|
@@ -451,14 +457,13 @@ const axios = require('axios');
|
|
|
451
457
|
console.log(axios.isCancel('something'));
|
|
452
458
|
```
|
|
453
459
|
|
|
454
|
-
|
|
460
|
+
Some bundlers and ES6 linters need this form:
|
|
455
461
|
|
|
456
462
|
```js
|
|
457
463
|
import { default as axios } from 'axios';
|
|
458
464
|
```
|
|
459
465
|
|
|
460
|
-
|
|
461
|
-
you can try importing the module package directly:
|
|
466
|
+
In custom or legacy environments, you can import the bundle directly:
|
|
462
467
|
|
|
463
468
|
```js
|
|
464
469
|
const axios = require('axios/dist/browser/axios.cjs'); // browser commonJS bundle (ES2017)
|
|
@@ -498,7 +503,7 @@ axios
|
|
|
498
503
|
params: {
|
|
499
504
|
ID: 12345,
|
|
500
505
|
},
|
|
501
|
-
timeout: 5000, // 5 seconds
|
|
506
|
+
timeout: 5000, // 5 seconds. See "Handling Timeouts" below for matching error handling
|
|
502
507
|
})
|
|
503
508
|
.then(function (response) {
|
|
504
509
|
console.log(response);
|
|
@@ -513,26 +518,26 @@ axios
|
|
|
513
518
|
// Want to use async/await? Add the `async` keyword to your outer function/method.
|
|
514
519
|
async function getUser() {
|
|
515
520
|
try {
|
|
516
|
-
// Example: GET request with query parameters
|
|
517
|
-
const response = await axios.get('/user', {
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
});
|
|
521
|
+
// Example: GET request with query parameters
|
|
522
|
+
const response = await axios.get('/user', {
|
|
523
|
+
params: {
|
|
524
|
+
ID: 12345,
|
|
525
|
+
},
|
|
526
|
+
});
|
|
522
527
|
|
|
523
|
-
// Using the `params` option improves readability and automatically formats query strings
|
|
528
|
+
// Using the `params` option improves readability and automatically formats query strings
|
|
524
529
|
|
|
525
|
-
console.log(response);
|
|
530
|
+
console.log(response);
|
|
526
531
|
} catch (error) {
|
|
527
532
|
console.error(error);
|
|
528
533
|
}
|
|
529
534
|
}
|
|
530
535
|
```
|
|
531
536
|
|
|
532
|
-
>
|
|
537
|
+
> Note: Set a `timeout` in production. Without one, a stalled request can hang
|
|
533
538
|
> indefinitely. See [Handling Timeouts](#handling-timeouts) for the matching error handling.
|
|
534
539
|
|
|
535
|
-
>
|
|
540
|
+
> Note: `async/await` is part of ECMAScript 2017 and is not supported in Internet
|
|
536
541
|
> Explorer and older browsers, so use with caution.
|
|
537
542
|
|
|
538
543
|
Performing a `POST` request
|
|
@@ -617,13 +622,13 @@ For convenience, aliases have been provided for all common request methods.
|
|
|
617
622
|
|
|
618
623
|
##### axios.patch(url[, data[, config]])
|
|
619
624
|
|
|
620
|
-
######
|
|
625
|
+
###### Note
|
|
621
626
|
|
|
622
627
|
When using the alias methods `url`, `method`, and `data` properties don't need to be specified in config.
|
|
623
628
|
|
|
624
|
-
### Concurrency (
|
|
629
|
+
### Concurrency (deprecated)
|
|
625
630
|
|
|
626
|
-
|
|
631
|
+
Use `Promise.all` instead of these helpers.
|
|
627
632
|
|
|
628
633
|
Helper functions for dealing with concurrent requests.
|
|
629
634
|
|
|
@@ -646,7 +651,7 @@ const instance = axios.create({
|
|
|
646
651
|
|
|
647
652
|
### Instance methods
|
|
648
653
|
|
|
649
|
-
The
|
|
654
|
+
The following instance methods are available. Axios merges the specified config with the instance config.
|
|
650
655
|
|
|
651
656
|
##### axios#request(config)
|
|
652
657
|
|
|
@@ -666,11 +671,11 @@ The available instance methods are listed below. The specified config will be me
|
|
|
666
671
|
|
|
667
672
|
##### axios#getUri([config])
|
|
668
673
|
|
|
669
|
-
## Request
|
|
674
|
+
## Request config
|
|
670
675
|
|
|
671
|
-
###
|
|
676
|
+
### Security notice: decompression-bomb protection is opt-in
|
|
672
677
|
|
|
673
|
-
By default `maxContentLength` and `maxBodyLength` are `-1` (unlimited). A malicious or compromised server can return a tiny gzip/deflate/brotli body that expands to gigabytes and exhaust the Node.js process.
|
|
678
|
+
By default `maxContentLength` and `maxBodyLength` are `-1` (unlimited). A malicious or compromised server can return a tiny gzip/deflate/brotli/zstd body that expands to gigabytes and exhaust the Node.js process.
|
|
674
679
|
|
|
675
680
|
If you call servers you do not fully trust, **set a cap**:
|
|
676
681
|
|
|
@@ -681,17 +686,17 @@ axios.defaults.maxBodyLength = 10 * 1024 * 1024;
|
|
|
681
686
|
|
|
682
687
|
See the [security guide](https://axios.rest/pages/misc/security.html) for details.
|
|
683
688
|
|
|
684
|
-
These are
|
|
689
|
+
These config options are available for requests. Only `url` is required. Requests default to `GET` when `method` is not set.
|
|
685
690
|
|
|
686
691
|
```js
|
|
687
692
|
{
|
|
688
|
-
// `url` is the server URL
|
|
693
|
+
// `url` is the server URL for the request
|
|
689
694
|
url: '/user',
|
|
690
695
|
|
|
691
696
|
// `method` is the request method to be used when making the request
|
|
692
697
|
method: 'get', // default
|
|
693
698
|
|
|
694
|
-
// `baseURL`
|
|
699
|
+
// Axios prepends `baseURL` to `url` unless `url` is absolute and `allowAbsoluteUrls` is set to true.
|
|
695
700
|
// It can be convenient to set `baseURL` for an instance of axios to pass relative URLs
|
|
696
701
|
// to the methods of that instance.
|
|
697
702
|
baseURL: 'https://some-domain.com/api/',
|
|
@@ -720,7 +725,7 @@ These are the available config options for making requests. Only the `url` is re
|
|
|
720
725
|
return data;
|
|
721
726
|
}],
|
|
722
727
|
|
|
723
|
-
// `parseReviver` is an optional function
|
|
728
|
+
// `parseReviver` is an optional function passed as the
|
|
724
729
|
// second argument (reviver) to JSON.parse()
|
|
725
730
|
parseReviver: function (key, value, context) {
|
|
726
731
|
// In modern environments, context.source provides the raw JSON string
|
|
@@ -770,9 +775,12 @@ These are the available config options for making requests. Only the `url` is re
|
|
|
770
775
|
|
|
771
776
|
// `data` is the data to be sent as the request body
|
|
772
777
|
// Only applicable for request methods 'PUT', 'POST', 'DELETE', and 'PATCH'
|
|
778
|
+
// `data` is request-specific: axios does not inherit or deep-merge it from defaults.
|
|
779
|
+
// To add shared body fields, use a request interceptor or transformRequest.
|
|
773
780
|
// When no `transformRequest` is set, it must be of one of the following types:
|
|
774
781
|
// - string, plain object, ArrayBuffer, ArrayBufferView, URLSearchParams
|
|
775
782
|
// - Browser only: FormData, File, Blob
|
|
783
|
+
// - React Native: FormData
|
|
776
784
|
// - Node only: Stream, Buffer, FormData (form-data package)
|
|
777
785
|
data: {
|
|
778
786
|
firstName: 'Fred'
|
|
@@ -789,7 +797,7 @@ These are the available config options for making requests. Only the `url` is re
|
|
|
789
797
|
data: 'Country=Brasil&City=Belo Horizonte',
|
|
790
798
|
|
|
791
799
|
// `timeout` specifies the number of milliseconds before the request times out.
|
|
792
|
-
// If the request takes longer than `timeout`,
|
|
800
|
+
// If the request takes longer than `timeout`, Axios aborts it.
|
|
793
801
|
timeout: 1000, // default is `0` (no timeout)
|
|
794
802
|
|
|
795
803
|
// `withCredentials` indicates whether or not cross-site Access-Control requests
|
|
@@ -810,6 +818,12 @@ These are the available config options for making requests. Only the `url` is re
|
|
|
810
818
|
// `auth` indicates that HTTP Basic auth should be used, and supplies credentials.
|
|
811
819
|
// This will set an `Authorization` header, overwriting any existing
|
|
812
820
|
// `Authorization` custom headers you have set using `headers`.
|
|
821
|
+
// If `auth` is omitted, the Node.js HTTP and fetch adapters can read
|
|
822
|
+
// HTTP Basic auth credentials from the request URL, for example
|
|
823
|
+
// `https://user:pass@example.com`. Axios decodes percent-encoded URL
|
|
824
|
+
// credentials, and `auth` takes precedence over URL-embedded credentials.
|
|
825
|
+
// The Node.js HTTP adapter preserves Basic auth on same-origin redirects
|
|
826
|
+
// and strips it on cross-origin redirects.
|
|
813
827
|
// Please note that only HTTP Basic auth is configurable through this parameter.
|
|
814
828
|
// For Bearer tokens and such, use `Authorization` custom headers instead.
|
|
815
829
|
auth: {
|
|
@@ -871,10 +885,12 @@ These are the available config options for making requests. Only the `url` is re
|
|
|
871
885
|
// Do whatever you want with the Axios progress event
|
|
872
886
|
},
|
|
873
887
|
|
|
874
|
-
// `maxContentLength` defines the max size of the
|
|
888
|
+
// `maxContentLength` defines the max size of the response content in bytes.
|
|
889
|
+
// It is enforced by the Node.js HTTP adapter and the fetch adapter.
|
|
875
890
|
maxContentLength: 2000,
|
|
876
891
|
|
|
877
|
-
// `maxBodyLength`
|
|
892
|
+
// `maxBodyLength` defines the max size of the request content in bytes.
|
|
893
|
+
// It is enforced by the Node.js HTTP adapter and the fetch adapter when the body length can be determined.
|
|
878
894
|
maxBodyLength: 2000,
|
|
879
895
|
|
|
880
896
|
// `redact` masks matching config keys when AxiosError#toJSON() is called.
|
|
@@ -882,18 +898,26 @@ These are the available config options for making requests. Only the `url` is re
|
|
|
882
898
|
redact: ['authorization', 'password'],
|
|
883
899
|
|
|
884
900
|
// `validateStatus` defines whether to resolve or reject the promise for a given
|
|
885
|
-
// HTTP response status code. If `validateStatus` returns `true`
|
|
886
|
-
//
|
|
887
|
-
//
|
|
901
|
+
// HTTP response status code. If `validateStatus` returns `true` or is set to
|
|
902
|
+
// `null`, Axios resolves the promise; otherwise, Axios rejects it.
|
|
903
|
+
// Explicit `validateStatus: undefined` resolves every status by default for
|
|
904
|
+
// backward compatibility. Set `transitional.validateStatusUndefinedResolves`
|
|
905
|
+
// to `false` to make explicit `undefined` behave as if this option was omitted.
|
|
888
906
|
validateStatus: function (status) {
|
|
889
907
|
return status >= 200 && status < 300; // default
|
|
890
908
|
},
|
|
891
909
|
|
|
892
910
|
// `maxRedirects` defines the maximum number of redirects to follow in node.js.
|
|
893
|
-
// If set to 0, no redirects
|
|
911
|
+
// If set to 0, Axios follows no redirects.
|
|
894
912
|
maxRedirects: 21, // default
|
|
895
913
|
|
|
896
|
-
// `
|
|
914
|
+
// `sensitiveHeaders` (Node only option) lists custom secret-bearing headers
|
|
915
|
+
// (such as `X-API-Key`) to remove from cross-origin redirects. Matching is
|
|
916
|
+
// case-insensitive. Same-origin redirects keep these headers. If
|
|
917
|
+
// `maxRedirects` is 0, this option is not used.
|
|
918
|
+
sensitiveHeaders: ['X-API-Key'],
|
|
919
|
+
|
|
920
|
+
// `beforeRedirect` defines a function that Axios calls before redirect.
|
|
897
921
|
// Use this to adjust the request options upon redirecting,
|
|
898
922
|
// to inspect the latest response headers,
|
|
899
923
|
// or to cancel the request by throwing an error
|
|
@@ -909,16 +933,10 @@ These are the available config options for making requests. Only the `url` is re
|
|
|
909
933
|
},
|
|
910
934
|
// Security note:
|
|
911
935
|
// The `beforeRedirect` hook runs after sensitive headers are stripped during redirects.
|
|
912
|
-
//
|
|
913
|
-
//
|
|
914
|
-
//
|
|
915
|
-
|
|
916
|
-
// Security note:
|
|
917
|
-
// The beforeRedirect hook runs after sensitive headers are stripped during redirects.
|
|
918
|
-
// Re-injecting credentials without checking the destination can expose sensitive data.
|
|
919
|
-
// Only add credentials for trusted HTTPS destinations.
|
|
920
|
-
// Avoid re-adding credentials on downgraded redirects.
|
|
921
|
-
|
|
936
|
+
// `follow-redirects` removes credentials on protocol downgrades
|
|
937
|
+
// (HTTPS to HTTP). Because `beforeRedirect` runs after that step,
|
|
938
|
+
// re-injecting credentials without checking the destination can expose
|
|
939
|
+
// sensitive data. Only add credentials for trusted HTTPS destinations.
|
|
922
940
|
|
|
923
941
|
// `socketPath` defines a UNIX Socket to be used in node.js.
|
|
924
942
|
// e.g. '/var/run/docker.sock' to send requests to the docker daemon.
|
|
@@ -937,10 +955,10 @@ These are the available config options for making requests. Only the `url` is re
|
|
|
937
955
|
// `ERR_BAD_OPTION_VALUE`. When null/undefined, no restriction is applied.
|
|
938
956
|
allowedSocketPaths: null, // default
|
|
939
957
|
|
|
940
|
-
// `transport` determines the transport method
|
|
941
|
-
// If defined,
|
|
942
|
-
// the default `http` or `https` library
|
|
943
|
-
// Otherwise, the `httpFollow` or `httpsFollow` library
|
|
958
|
+
// `transport` determines the transport method for the request.
|
|
959
|
+
// If defined, Axios uses it. Otherwise, if `maxRedirects` is 0,
|
|
960
|
+
// Axios uses the default `http` or `https` library, depending on the protocol specified in `protocol`.
|
|
961
|
+
// Otherwise, Axios uses the `httpFollow` or `httpsFollow` library, again depending on the protocol,
|
|
944
962
|
// which can handle redirects.
|
|
945
963
|
transport: undefined, // default
|
|
946
964
|
|
|
@@ -958,6 +976,12 @@ These are the available config options for making requests. Only the `url` is re
|
|
|
958
976
|
// for your proxy configuration, you can also define a `no_proxy` environment
|
|
959
977
|
// variable as a comma-separated list of domains that should not be proxied.
|
|
960
978
|
// Use `false` to disable proxies, ignoring environment variables.
|
|
979
|
+
// On Node.js versions with native environment proxy support, axios defers
|
|
980
|
+
// environment proxy handling to Node when the selected agent has `proxyEnv`
|
|
981
|
+
// enabled, including processes started with `NODE_USE_ENV_PROXY=1`,
|
|
982
|
+
// `--use-env-proxy`, or `NODE_OPTIONS=--use-env-proxy`. Custom agents without
|
|
983
|
+
// `proxyEnv` continue to use axios environment proxy resolution. Explicit
|
|
984
|
+
// `proxy` config is still handled by axios.
|
|
961
985
|
// `auth` indicates that HTTP Basic auth should be used to connect to the proxy, and
|
|
962
986
|
// supplies credentials.
|
|
963
987
|
// For `http://` targets, axios sends the request to the proxy in
|
|
@@ -966,12 +990,15 @@ These are the available config options for making requests. Only the `url` is re
|
|
|
966
990
|
// For `https://` targets, axios establishes a CONNECT tunnel through the
|
|
967
991
|
// proxy and performs TLS end-to-end with the origin; `Proxy-Authorization`
|
|
968
992
|
// is sent on the CONNECT request only, never on the wrapped TLS request,
|
|
969
|
-
// so the proxy never sees the URL, headers, or body.
|
|
970
|
-
// `httpsAgent`
|
|
993
|
+
// so the proxy never sees the URL, headers, or body. Axios forwards
|
|
994
|
+
// `httpsAgent` TLS options such as `ca`, `cert`, `key`, and
|
|
995
|
+
// `rejectUnauthorized` to the generated tunneling agent, so they still apply
|
|
996
|
+
// to the origin TLS connection.
|
|
997
|
+
// If you supply an `HttpsProxyAgent`, axios leaves tunneling to that agent.
|
|
971
998
|
// If the proxy server uses HTTPS, then you must set the protocol to `https`.
|
|
972
999
|
// A user-supplied `Host` header in `headers` is preserved when forwarding
|
|
973
1000
|
// through a proxy (case-insensitive match on `host`/`Host`/`HOST`); this
|
|
974
|
-
// lets you target a virtual host that differs from the request URL
|
|
1001
|
+
// lets you target a virtual host that differs from the request URL, for
|
|
975
1002
|
// example, hitting `127.0.0.1:4000` while having the proxy treat the
|
|
976
1003
|
// request as `example.com`. If no `Host` header is supplied, axios
|
|
977
1004
|
// defaults it to the request URL's `hostname:port` as before. The Host
|
|
@@ -1000,6 +1027,8 @@ These are the available config options for making requests. Only the `url` is re
|
|
|
1000
1027
|
// `decompress` indicates whether or not the response body should be decompressed
|
|
1001
1028
|
// automatically. If set to `true` will also remove the 'content-encoding' header
|
|
1002
1029
|
// from the responses objects of all decompressed responses
|
|
1030
|
+
// Axios supports gzip, deflate, brotli, and zstd when the current Node.js
|
|
1031
|
+
// runtime provides the corresponding zlib decompressor.
|
|
1003
1032
|
// - Node only (XHR cannot turn off decompression)
|
|
1004
1033
|
decompress: true, // default
|
|
1005
1034
|
|
|
@@ -1029,6 +1058,16 @@ These are the available config options for making requests. Only the `url` is re
|
|
|
1029
1058
|
// throw ETIMEDOUT error instead of generic ECONNABORTED on request timeouts
|
|
1030
1059
|
clarifyTimeoutError: false,
|
|
1031
1060
|
|
|
1061
|
+
// keep explicit `validateStatus: undefined` resolving every response status
|
|
1062
|
+
// for backward compatibility. Set to false to make explicit undefined behave
|
|
1063
|
+
// as if validateStatus was omitted.
|
|
1064
|
+
validateStatusUndefinedResolves: true,
|
|
1065
|
+
|
|
1066
|
+
// advertise `zstd` in the default Accept-Encoding header when the current
|
|
1067
|
+
// Node.js runtime supports zstd decompression. Axios still decompresses
|
|
1068
|
+
// zstd responses when support exists and `decompress` is true.
|
|
1069
|
+
advertiseZstdAcceptEncoding: false,
|
|
1070
|
+
|
|
1032
1071
|
// use the legacy interceptor request/response ordering
|
|
1033
1072
|
legacyInterceptorReqResOrdering: true, // default
|
|
1034
1073
|
},
|
|
@@ -1054,6 +1093,15 @@ These are the available config options for making requests. Only the `url` is re
|
|
|
1054
1093
|
}
|
|
1055
1094
|
```
|
|
1056
1095
|
|
|
1096
|
+
For custom secret-bearing headers in Node.js, list them in `sensitiveHeaders` so Axios removes them when following a redirect to another origin:
|
|
1097
|
+
|
|
1098
|
+
```js
|
|
1099
|
+
axios.get('https://api.example.com/users', {
|
|
1100
|
+
headers: { 'X-API-Key': 'secret' },
|
|
1101
|
+
sensitiveHeaders: ['X-API-Key'],
|
|
1102
|
+
});
|
|
1103
|
+
```
|
|
1104
|
+
|
|
1057
1105
|
### Strict RFC 3986 percent-encoding for query params
|
|
1058
1106
|
|
|
1059
1107
|
By default, axios decodes `%3A`, `%24`, `%2C` and `%20` back to `:`, `$`, `,` and `+` for readability (the `+` follows the `application/x-www-form-urlencoded` convention for spaces in query strings). These characters are valid in a query component under [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986#section-3.4), so the default output is correct, but some backends require strict percent-encoding and reject the readable form.
|
|
@@ -1064,26 +1112,26 @@ Override the default encoder via `paramsSerializer.encode`:
|
|
|
1064
1112
|
// Per-request: emit strict RFC 3986 percent-encoding for query values
|
|
1065
1113
|
axios.get('/foo', {
|
|
1066
1114
|
params: { filter: JSON.stringify({ startedAt: '2026-01-23' }) },
|
|
1067
|
-
paramsSerializer: { encode: encodeURIComponent }
|
|
1115
|
+
paramsSerializer: { encode: encodeURIComponent },
|
|
1068
1116
|
});
|
|
1069
1117
|
|
|
1070
1118
|
// Or set it on the instance defaults
|
|
1071
1119
|
const client = axios.create({
|
|
1072
|
-
paramsSerializer: { encode: encodeURIComponent }
|
|
1120
|
+
paramsSerializer: { encode: encodeURIComponent },
|
|
1073
1121
|
});
|
|
1074
1122
|
```
|
|
1075
1123
|
|
|
1076
|
-
##
|
|
1124
|
+
## HTTP/2 support
|
|
1077
1125
|
|
|
1078
|
-
Axios has experimental HTTP/2 support
|
|
1126
|
+
Axios has experimental HTTP/2 support in the Node.js HTTP adapter.
|
|
1079
1127
|
|
|
1080
|
-
Support depends on the runtime environment and Node.js version.
|
|
1128
|
+
Support depends on the runtime environment and Node.js version. Redirects and some adapter behavior may differ from HTTP/1.1.
|
|
1081
1129
|
|
|
1082
|
-
Options like `httpVersion` and `http2Options` are adapter-specific and may not work
|
|
1130
|
+
Options like `httpVersion` and `http2Options` are adapter-specific and may not work the same way in every environment.
|
|
1083
1131
|
|
|
1084
|
-
If HTTP/2
|
|
1132
|
+
If you need HTTP/2, check runtime support or use a custom adapter.
|
|
1085
1133
|
|
|
1086
|
-
## Response
|
|
1134
|
+
## Response schema
|
|
1087
1135
|
|
|
1088
1136
|
The response to a request contains the following information.
|
|
1089
1137
|
|
|
@@ -1113,7 +1161,7 @@ The response to a request contains the following information.
|
|
|
1113
1161
|
}
|
|
1114
1162
|
```
|
|
1115
1163
|
|
|
1116
|
-
When using `then`, you
|
|
1164
|
+
When using `then`, you receive the response like this:
|
|
1117
1165
|
|
|
1118
1166
|
```js
|
|
1119
1167
|
const response = await axios.get('/user/12345');
|
|
@@ -1124,18 +1172,18 @@ console.log(response.headers);
|
|
|
1124
1172
|
console.log(response.config);
|
|
1125
1173
|
```
|
|
1126
1174
|
|
|
1127
|
-
When using `catch`, or passing a [rejection callback](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then) as second parameter of `then`, the response
|
|
1175
|
+
When using `catch`, or passing a [rejection callback](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then) as the second parameter of `then`, read the response from the `error` object. See [Handling errors](#handling-errors).
|
|
1128
1176
|
|
|
1129
|
-
## Config
|
|
1177
|
+
## Config defaults
|
|
1130
1178
|
|
|
1131
|
-
|
|
1179
|
+
Config defaults apply to every request.
|
|
1132
1180
|
|
|
1133
1181
|
### Global axios defaults
|
|
1134
1182
|
|
|
1135
1183
|
```js
|
|
1136
1184
|
axios.defaults.baseURL = 'https://api.example.com';
|
|
1137
1185
|
|
|
1138
|
-
// Important: If
|
|
1186
|
+
// Important: If you use axios with multiple domains, Axios sends AUTH_TOKEN to all of them.
|
|
1139
1187
|
// See below for an example using Custom instance defaults instead.
|
|
1140
1188
|
axios.defaults.headers.common['Authorization'] = AUTH_TOKEN;
|
|
1141
1189
|
|
|
@@ -1156,7 +1204,9 @@ instance.defaults.headers.common['Authorization'] = AUTH_TOKEN;
|
|
|
1156
1204
|
|
|
1157
1205
|
### Config order of precedence
|
|
1158
1206
|
|
|
1159
|
-
|
|
1207
|
+
Axios merges config in this order: library defaults from [lib/defaults/index.js](https://github.com/axios/axios/blob/main/lib/defaults/index.js#L49), the instance `defaults` property, and the request `config` argument. Later values take precedence over earlier ones.
|
|
1208
|
+
|
|
1209
|
+
Some options are request-specific and are only taken from the request `config`. `data` is one of those options: axios does not inherit or deep-merge request bodies from global or instance defaults. If every request needs shared body fields, add them with a request interceptor or `transformRequest`, and scope that logic carefully so sensitive values are not sent to the wrong endpoint.
|
|
1160
1210
|
|
|
1161
1211
|
```js
|
|
1162
1212
|
// Create an instance using the config defaults provided by the library
|
|
@@ -1258,8 +1308,8 @@ axios.interceptors.request.use(
|
|
|
1258
1308
|
```
|
|
1259
1309
|
|
|
1260
1310
|
If you want to execute a particular interceptor based on a runtime check,
|
|
1261
|
-
you can add a `runWhen` function to the options object. The request interceptor will not
|
|
1262
|
-
of `runWhen` is `false`.
|
|
1311
|
+
you can add a `runWhen` function to the options object. The request interceptor will not run **if and only if** the return
|
|
1312
|
+
of `runWhen` is `false`. Axios calls the function with the config
|
|
1263
1313
|
object (don't forget that you can bind your own arguments to it as well.) This can be handy when you have an
|
|
1264
1314
|
asynchronous request interceptor that only needs to run at certain times.
|
|
1265
1315
|
|
|
@@ -1277,15 +1327,15 @@ axios.interceptors.request.use(
|
|
|
1277
1327
|
);
|
|
1278
1328
|
```
|
|
1279
1329
|
|
|
1280
|
-
>
|
|
1330
|
+
> Note: The options parameter (with `synchronous` and `runWhen` properties) is only supported for request interceptors at the moment.
|
|
1281
1331
|
|
|
1282
|
-
### Interceptor
|
|
1332
|
+
### Interceptor execution order
|
|
1283
1333
|
|
|
1284
|
-
|
|
1334
|
+
Request and response interceptors use different execution orders.
|
|
1285
1335
|
|
|
1286
|
-
Request interceptors
|
|
1336
|
+
Request interceptors run in reverse order (LIFO: last in, first out). The last interceptor added runs first.
|
|
1287
1337
|
|
|
1288
|
-
Response interceptors
|
|
1338
|
+
Response interceptors run in the order they were added (FIFO: first in, first out). The first interceptor added runs first.
|
|
1289
1339
|
|
|
1290
1340
|
Example:
|
|
1291
1341
|
|
|
@@ -1314,37 +1364,33 @@ instance.interceptors.response.use(interceptor('Response Interceptor 3'));
|
|
|
1314
1364
|
// Response Interceptor 3
|
|
1315
1365
|
```
|
|
1316
1366
|
|
|
1317
|
-
### Multiple
|
|
1367
|
+
### Multiple interceptors
|
|
1318
1368
|
|
|
1319
|
-
|
|
1320
|
-
and when the response was fulfilled
|
|
1369
|
+
When a response is fulfilled and multiple response interceptors are registered:
|
|
1321
1370
|
|
|
1322
|
-
-
|
|
1323
|
-
-
|
|
1324
|
-
-
|
|
1325
|
-
-
|
|
1326
|
-
-
|
|
1327
|
-
- then the following fulfillment-interceptor is not called
|
|
1328
|
-
- then the following rejection-interceptor is called
|
|
1329
|
-
- once caught, another following fulfill-interceptor is called again (just like in a promise chain).
|
|
1371
|
+
- Each interceptor runs in registration order.
|
|
1372
|
+
- Each interceptor receives the result from the previous interceptor.
|
|
1373
|
+
- The chain returns the result from the last interceptor.
|
|
1374
|
+
- If a fulfillment interceptor throws, Axios skips the next fulfillment interceptor and calls the next rejection interceptor.
|
|
1375
|
+
- After the error is caught, later fulfillment interceptors run again, just like in a promise chain.
|
|
1330
1376
|
|
|
1331
1377
|
Read [the interceptor tests](./test/specs/interceptors.spec.js) to see all this in code.
|
|
1332
1378
|
|
|
1333
|
-
## Error
|
|
1379
|
+
## Error types
|
|
1334
1380
|
|
|
1335
|
-
|
|
1381
|
+
Axios error messages include details that can help you debug the request.
|
|
1336
1382
|
|
|
1337
|
-
|
|
1383
|
+
Axios errors use this structure:
|
|
1338
1384
|
| Property | Definition |
|
|
1339
1385
|
| -------- | ---------- |
|
|
1340
1386
|
| message | A quick summary of the error message and the status it failed with. |
|
|
1341
1387
|
| name | This defines where the error originated from. For axios, it will always be an 'AxiosError'. |
|
|
1342
|
-
| stack |
|
|
1388
|
+
| stack | Stack trace for the error. |
|
|
1343
1389
|
| config | An axios config object with specific instance configurations defined by the user from when the request was made |
|
|
1344
|
-
| code |
|
|
1390
|
+
| code | Axios error code. The table below lists internal Axios error codes. |
|
|
1345
1391
|
| status | HTTP response status code. See [here](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes) for common HTTP response status code meanings.
|
|
1346
1392
|
|
|
1347
|
-
|
|
1393
|
+
These are the internal Axios error codes:
|
|
1348
1394
|
|
|
1349
1395
|
| Code | Definition |
|
|
1350
1396
|
| ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
@@ -1354,16 +1400,16 @@ Below is a list of potential axios identified error:
|
|
|
1354
1400
|
| ERR_DEPRECATED | Deprecated feature or method used in axios. |
|
|
1355
1401
|
| ERR_INVALID_URL | Invalid URL provided for axios request. |
|
|
1356
1402
|
| ECONNABORTED | Typically indicates that the request has been timed out (unless `transitional.clarifyTimeoutError` is set) or aborted by the browser or its plugin. |
|
|
1357
|
-
| ERR_CANCELED |
|
|
1358
|
-
| ETIMEDOUT | Request timed out
|
|
1403
|
+
| ERR_CANCELED | The user explicitly canceled the request with an AbortSignal or CancelToken. |
|
|
1404
|
+
| ETIMEDOUT | Request timed out after exceeding the configured Axios timeout. Set `transitional.clarifyTimeoutError` to `true`; otherwise Axios throws a generic `ECONNABORTED` error. |
|
|
1359
1405
|
| ERR_NETWORK | Network-related issue. In the browser, this error can also be caused by a [CORS](https://developer.mozilla.org/ru/docs/Web/HTTP/Guides/CORS) or [Mixed Content](https://developer.mozilla.org/en-US/docs/Web/Security/Mixed_content) policy violation. The browser does not allow the JS code to clarify the real reason for the error caused by security issues, so please check the console. |
|
|
1360
|
-
| ERR_FR_TOO_MANY_REDIRECTS | Request
|
|
1406
|
+
| ERR_FR_TOO_MANY_REDIRECTS | Request exceeded the configured maximum number of redirects. |
|
|
1361
1407
|
| ERR_BAD_RESPONSE | Response cannot be parsed properly or is in an unexpected format. Usually related to a response with `5xx` status code. |
|
|
1362
1408
|
| ERR_BAD_REQUEST | The request has an unexpected format or is missing required parameters. Usually related to a response with `4xx` status code. |
|
|
1363
1409
|
|
|
1364
|
-
## Handling
|
|
1410
|
+
## Handling errors
|
|
1365
1411
|
|
|
1366
|
-
|
|
1412
|
+
By default, Axios rejects responses with status codes outside the 2xx range.
|
|
1367
1413
|
|
|
1368
1414
|
```js
|
|
1369
1415
|
axios.get('/user/12345').catch(function (error) {
|
|
@@ -1386,7 +1432,7 @@ axios.get('/user/12345').catch(function (error) {
|
|
|
1386
1432
|
});
|
|
1387
1433
|
```
|
|
1388
1434
|
|
|
1389
|
-
|
|
1435
|
+
Use `validateStatus` to override the default condition (`status >= 200 && status < 300`) and choose which HTTP status codes should reject.
|
|
1390
1436
|
|
|
1391
1437
|
```js
|
|
1392
1438
|
axios.get('/user/12345', {
|
|
@@ -1396,7 +1442,20 @@ axios.get('/user/12345', {
|
|
|
1396
1442
|
});
|
|
1397
1443
|
```
|
|
1398
1444
|
|
|
1399
|
-
|
|
1445
|
+
By default, explicit `validateStatus: undefined` keeps legacy behavior and resolves every response status because `transitional.validateStatusUndefinedResolves` defaults to `true`. Set it to `false` to make explicit `validateStatus: undefined` behave like the option was omitted, so Axios uses the configured/default validator and rejects non-2xx responses by default.
|
|
1446
|
+
|
|
1447
|
+
`validateStatus: null` still accepts every response status. If you disable the transitional behavior and intentionally want all statuses to resolve, use `null` or `() => true`.
|
|
1448
|
+
|
|
1449
|
+
```js
|
|
1450
|
+
axios.get('/user/12345', {
|
|
1451
|
+
validateStatus: undefined,
|
|
1452
|
+
transitional: {
|
|
1453
|
+
validateStatusUndefinedResolves: false,
|
|
1454
|
+
},
|
|
1455
|
+
});
|
|
1456
|
+
```
|
|
1457
|
+
|
|
1458
|
+
Use `toJSON` to get more information about the HTTP error.
|
|
1400
1459
|
|
|
1401
1460
|
```js
|
|
1402
1461
|
axios.get('/user/12345').catch(function (error) {
|
|
@@ -1407,15 +1466,17 @@ axios.get('/user/12345').catch(function (error) {
|
|
|
1407
1466
|
To avoid logging secrets from `error.config`, pass a `redact` array in the request config. Matching config keys are masked case-insensitively at any depth when `AxiosError#toJSON()` is called.
|
|
1408
1467
|
|
|
1409
1468
|
```js
|
|
1410
|
-
axios
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
|
|
1415
|
-
|
|
1469
|
+
axios
|
|
1470
|
+
.get('/user/12345', {
|
|
1471
|
+
headers: { Authorization: 'Bearer token' },
|
|
1472
|
+
redact: ['authorization'],
|
|
1473
|
+
})
|
|
1474
|
+
.catch(function (error) {
|
|
1475
|
+
console.log(error.toJSON().config.headers.Authorization); // [REDACTED ****]
|
|
1476
|
+
});
|
|
1416
1477
|
```
|
|
1417
1478
|
|
|
1418
|
-
## Handling
|
|
1479
|
+
## Handling timeouts
|
|
1419
1480
|
|
|
1420
1481
|
```js
|
|
1421
1482
|
async function fetchWithTimeout() {
|
|
@@ -1449,7 +1510,7 @@ async function fetchWithTimeout() {
|
|
|
1449
1510
|
|
|
1450
1511
|
### AbortController
|
|
1451
1512
|
|
|
1452
|
-
|
|
1513
|
+
Since `v0.22.0`, Axios supports AbortController:
|
|
1453
1514
|
|
|
1454
1515
|
```js
|
|
1455
1516
|
const controller = new AbortController();
|
|
@@ -1465,15 +1526,15 @@ axios
|
|
|
1465
1526
|
controller.abort();
|
|
1466
1527
|
```
|
|
1467
1528
|
|
|
1468
|
-
### CancelToken
|
|
1529
|
+
### CancelToken (deprecated)
|
|
1469
1530
|
|
|
1470
1531
|
You can also cancel a request using a _CancelToken_.
|
|
1471
1532
|
|
|
1472
1533
|
> The axios cancel token API is based on the withdrawn [cancellable promises proposal](https://github.com/tc39/proposal-cancelable-promises).
|
|
1473
1534
|
|
|
1474
|
-
> This API is deprecated since v0.22.0 and
|
|
1535
|
+
> This API is deprecated since v0.22.0 and should not be used in new projects.
|
|
1475
1536
|
|
|
1476
|
-
|
|
1537
|
+
Create a cancel token with the `CancelToken.source` factory:
|
|
1477
1538
|
|
|
1478
1539
|
```js
|
|
1479
1540
|
const CancelToken = axios.CancelToken;
|
|
@@ -1505,7 +1566,7 @@ axios.post(
|
|
|
1505
1566
|
source.cancel('Operation canceled by the user.');
|
|
1506
1567
|
```
|
|
1507
1568
|
|
|
1508
|
-
You can also
|
|
1569
|
+
You can also pass an executor function to the `CancelToken` constructor:
|
|
1509
1570
|
|
|
1510
1571
|
```js
|
|
1511
1572
|
const CancelToken = axios.CancelToken;
|
|
@@ -1522,16 +1583,49 @@ axios.get('/user/12345', {
|
|
|
1522
1583
|
cancel();
|
|
1523
1584
|
```
|
|
1524
1585
|
|
|
1525
|
-
|
|
1526
|
-
|
|
1586
|
+
`CancelToken` also exposes low-level helpers for legacy integrations:
|
|
1587
|
+
|
|
1588
|
+
```js
|
|
1589
|
+
const source = axios.CancelToken.source();
|
|
1590
|
+
|
|
1591
|
+
const listener = (cancel) => {
|
|
1592
|
+
console.log(cancel.message);
|
|
1593
|
+
};
|
|
1594
|
+
|
|
1595
|
+
source.token.subscribe(listener);
|
|
1596
|
+
|
|
1597
|
+
const signal = source.token.toAbortSignal();
|
|
1598
|
+
// Pass `signal` to APIs that accept AbortSignal.
|
|
1599
|
+
|
|
1600
|
+
source.cancel('Operation canceled by the user.');
|
|
1601
|
+
source.token.unsubscribe(listener);
|
|
1602
|
+
```
|
|
1603
|
+
|
|
1604
|
+
Canceled requests reject with `axios.CanceledError`. The legacy `axios.Cancel` export is an alias of `axios.CanceledError`, and cancellation errors include `__CANCEL__` for `axios.isCancel` compatibility.
|
|
1605
|
+
|
|
1606
|
+
> Note: You can cancel several requests with the same cancel token or abort controller.
|
|
1607
|
+
> If a cancellation token is already cancelled when an Axios request starts, Axios cancels the request immediately without making a real request.
|
|
1527
1608
|
|
|
1528
1609
|
> During the transition period, you can use both cancellation APIs, even for the same request:
|
|
1529
1610
|
|
|
1611
|
+
```js
|
|
1612
|
+
const controller = new AbortController();
|
|
1613
|
+
const source = axios.CancelToken.source();
|
|
1614
|
+
|
|
1615
|
+
axios.get('/user/12345', {
|
|
1616
|
+
cancelToken: source.token,
|
|
1617
|
+
signal: controller.signal,
|
|
1618
|
+
});
|
|
1619
|
+
|
|
1620
|
+
controller.abort();
|
|
1621
|
+
source.cancel('Operation canceled by the user.');
|
|
1622
|
+
```
|
|
1623
|
+
|
|
1530
1624
|
## Using `application/x-www-form-urlencoded` format
|
|
1531
1625
|
|
|
1532
1626
|
### URLSearchParams
|
|
1533
1627
|
|
|
1534
|
-
By default, axios serializes JavaScript objects to `JSON`. To send data
|
|
1628
|
+
By default, axios serializes JavaScript objects to `JSON`. To send data as [`application/x-www-form-urlencoded`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST), use the [`URLSearchParams`](https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams) API. It works in most browsers and in [Node](https://nodejs.org/api/url.html#url_class_urlsearchparams) v10 and later.
|
|
1535
1629
|
|
|
1536
1630
|
```js
|
|
1537
1631
|
const params = new URLSearchParams({ foo: 'bar' });
|
|
@@ -1539,9 +1633,9 @@ params.append('extraparam', 'value');
|
|
|
1539
1633
|
axios.post('/foo', params);
|
|
1540
1634
|
```
|
|
1541
1635
|
|
|
1542
|
-
### Query string (
|
|
1636
|
+
### Query string (older browsers)
|
|
1543
1637
|
|
|
1544
|
-
For
|
|
1638
|
+
For very old browsers, use a [polyfill](https://github.com/WebReflection/url-search-params) and make sure it patches the global environment.
|
|
1545
1639
|
|
|
1546
1640
|
Alternatively, you can encode data using the [`qs`](https://github.com/ljharb/qs) library:
|
|
1547
1641
|
|
|
@@ -1550,7 +1644,7 @@ const qs = require('qs');
|
|
|
1550
1644
|
axios.post('/foo', qs.stringify({ bar: 123 }));
|
|
1551
1645
|
```
|
|
1552
1646
|
|
|
1553
|
-
|
|
1647
|
+
With ES modules:
|
|
1554
1648
|
|
|
1555
1649
|
```js
|
|
1556
1650
|
import qs from 'qs';
|
|
@@ -1566,7 +1660,7 @@ axios(options);
|
|
|
1566
1660
|
|
|
1567
1661
|
### Older Node.js versions
|
|
1568
1662
|
|
|
1569
|
-
For older Node.js engines,
|
|
1663
|
+
For older Node.js engines, use the [`querystring`](https://nodejs.org/api/querystring.html) module:
|
|
1570
1664
|
|
|
1571
1665
|
```js
|
|
1572
1666
|
const querystring = require('querystring');
|
|
@@ -1575,11 +1669,11 @@ axios.post('https://something.com/', querystring.stringify({ foo: 'bar' }));
|
|
|
1575
1669
|
|
|
1576
1670
|
You can also use the [`qs`](https://github.com/ljharb/qs) library.
|
|
1577
1671
|
|
|
1578
|
-
>
|
|
1672
|
+
> Note: The `qs` library is preferable if you need to stringify nested objects, as the `querystring` method has [known issues](https://github.com/nodejs/node-v0.x-archive/issues/1665) with that use case.
|
|
1579
1673
|
|
|
1580
|
-
###
|
|
1674
|
+
### Automatic serialization to URLSearchParams
|
|
1581
1675
|
|
|
1582
|
-
Axios
|
|
1676
|
+
Axios automatically serializes the data object to urlencoded format if the content-type header is set to "application/x-www-form-urlencoded".
|
|
1583
1677
|
|
|
1584
1678
|
```js
|
|
1585
1679
|
const data = {
|
|
@@ -1597,7 +1691,7 @@ await axios.postForm('https://postman-echo.com/post', data, {
|
|
|
1597
1691
|
});
|
|
1598
1692
|
```
|
|
1599
1693
|
|
|
1600
|
-
The server
|
|
1694
|
+
The server receives these fields:
|
|
1601
1695
|
|
|
1602
1696
|
```js
|
|
1603
1697
|
{
|
|
@@ -1614,7 +1708,7 @@ The server will handle it as:
|
|
|
1614
1708
|
}
|
|
1615
1709
|
```
|
|
1616
1710
|
|
|
1617
|
-
If your backend body
|
|
1711
|
+
If your backend body parser, such as `body-parser` for `express.js`, supports nested object decoding, the server receives the same object structure:
|
|
1618
1712
|
|
|
1619
1713
|
```js
|
|
1620
1714
|
const app = express();
|
|
@@ -1633,8 +1727,9 @@ server = app.listen(3000);
|
|
|
1633
1727
|
|
|
1634
1728
|
### FormData
|
|
1635
1729
|
|
|
1636
|
-
To send
|
|
1637
|
-
|
|
1730
|
+
To send data as `multipart/form-data`, pass a FormData instance as the payload.
|
|
1731
|
+
You do not need to set the `Content-Type` header. Axios detects it from the payload type.
|
|
1732
|
+
For browser, web worker, and React Native `FormData`, leave `Content-Type` unset so the runtime can add the multipart boundary.
|
|
1638
1733
|
|
|
1639
1734
|
```js
|
|
1640
1735
|
const formData = new FormData();
|
|
@@ -1643,7 +1738,7 @@ formData.append('foo', 'bar');
|
|
|
1643
1738
|
axios.post('https://httpbin.org/post', formData);
|
|
1644
1739
|
```
|
|
1645
1740
|
|
|
1646
|
-
In node.js,
|
|
1741
|
+
In node.js, use the [`form-data`](https://github.com/form-data/form-data) library:
|
|
1647
1742
|
|
|
1648
1743
|
```js
|
|
1649
1744
|
const FormData = require('form-data');
|
|
@@ -1658,12 +1753,12 @@ axios.post('https://example.com', form);
|
|
|
1658
1753
|
|
|
1659
1754
|
In node.js, when a `FormData` object provides `getHeaders()`, axios copies all returned headers by default for v1 compatibility. If the `FormData` object is custom or not fully trusted, set `formDataHeaderPolicy: 'content-only'` to copy only `Content-Type` and `Content-Length`, and set any other request headers explicitly with the request `headers` config.
|
|
1660
1755
|
|
|
1661
|
-
###
|
|
1756
|
+
### Automatic serialization to FormData
|
|
1662
1757
|
|
|
1663
|
-
|
|
1758
|
+
Since `v0.27.0`, Axios can serialize an object to FormData if the request `Content-Type`
|
|
1664
1759
|
header is set to `multipart/form-data`.
|
|
1665
1760
|
|
|
1666
|
-
|
|
1761
|
+
This request submits data as FormData in browsers and Node.js:
|
|
1667
1762
|
|
|
1668
1763
|
```js
|
|
1669
1764
|
import axios from 'axios';
|
|
@@ -1681,10 +1776,9 @@ axios
|
|
|
1681
1776
|
.then(({ data }) => console.log(data));
|
|
1682
1777
|
```
|
|
1683
1778
|
|
|
1684
|
-
|
|
1779
|
+
The Node.js build uses the [`form-data`](https://github.com/form-data/form-data) polyfill by default.
|
|
1685
1780
|
|
|
1686
|
-
You can
|
|
1687
|
-
but you probably won't need it in most cases:
|
|
1781
|
+
You can override the FormData class with the `env.FormData` config option, but most applications do not need this:
|
|
1688
1782
|
|
|
1689
1783
|
```js
|
|
1690
1784
|
const axios = require('axios');
|
|
@@ -1703,31 +1797,34 @@ axios
|
|
|
1703
1797
|
.then(({ data }) => console.log(data));
|
|
1704
1798
|
```
|
|
1705
1799
|
|
|
1706
|
-
Axios FormData serializer supports
|
|
1800
|
+
The Axios FormData serializer supports these special endings:
|
|
1707
1801
|
|
|
1708
1802
|
- `{}` - serialize the value with JSON.stringify
|
|
1709
1803
|
- `[]` - unwrap the array-like object as separate fields with the same key
|
|
1710
1804
|
|
|
1711
|
-
>
|
|
1805
|
+
> Note: Arrays and FileList objects are unwrapped by default.
|
|
1712
1806
|
|
|
1713
1807
|
FormData serializer supports additional options via `config.formSerializer: object` property to handle rare cases:
|
|
1714
1808
|
|
|
1715
|
-
- `visitor: Function` - user-defined visitor function that
|
|
1809
|
+
- `visitor: Function` - user-defined visitor function that Axios calls recursively to serialize the data object
|
|
1716
1810
|
to a `FormData` object by following custom rules.
|
|
1717
1811
|
|
|
1718
1812
|
- `dots: boolean = false` - use dot notation instead of brackets to serialize arrays and objects;
|
|
1719
1813
|
|
|
1720
1814
|
- `metaTokens: boolean = true` - add the special ending (e.g `user{}: '{"name": "John"}'`) in the FormData key.
|
|
1721
|
-
|
|
1815
|
+
A backend body parser can use this meta-information to parse the value as JSON.
|
|
1722
1816
|
|
|
1723
|
-
- `indexes: null|false|true = false` - controls how
|
|
1817
|
+
- `indexes: null|false|true = false` - controls how Axios adds indexes to unwrapped keys of `flat` array-like objects.
|
|
1724
1818
|
- `null` - don't add brackets (`arr: 1`, `arr: 2`, `arr: 3`)
|
|
1725
1819
|
- `false`(default) - add empty brackets (`arr[]: 1`, `arr[]: 2`, `arr[]: 3`)
|
|
1726
1820
|
- `true` - add brackets with indexes (`arr[0]: 1`, `arr[1]: 2`, `arr[2]: 3`)
|
|
1727
1821
|
- `maxDepth: number = 100` - maximum object nesting depth the serializer will recurse into. If the
|
|
1728
1822
|
input object exceeds this depth, an `AxiosError` with `code: 'ERR_FORM_DATA_DEPTH_EXCEEDED'` is
|
|
1729
|
-
thrown instead of overflowing the call stack. This protects server
|
|
1823
|
+
thrown instead of overflowing the call stack. This protects server applications from DoS
|
|
1730
1824
|
attacks via deeply nested payloads. Set to `Infinity` to disable the limit and restore pre-fix behaviour.
|
|
1825
|
+
- `Blob: typeof Blob` - Blob constructor used when converting ArrayBuffer-like values for spec-compliant
|
|
1826
|
+
`FormData`. Override it only for runtimes that provide a compatible `Blob` constructor under a
|
|
1827
|
+
different binding.
|
|
1731
1828
|
|
|
1732
1829
|
```js
|
|
1733
1830
|
// Raise the limit for a schema that genuinely nests deeper than 100 levels:
|
|
@@ -1737,7 +1834,7 @@ axios.postForm('/api', data, { formSerializer: { maxDepth: 200 } });
|
|
|
1737
1834
|
axios.get('/api', { params: data, paramsSerializer: { maxDepth: 200 } });
|
|
1738
1835
|
```
|
|
1739
1836
|
|
|
1740
|
-
|
|
1837
|
+
Given this object:
|
|
1741
1838
|
|
|
1742
1839
|
```js
|
|
1743
1840
|
const obj = {
|
|
@@ -1752,7 +1849,7 @@ const obj = {
|
|
|
1752
1849
|
};
|
|
1753
1850
|
```
|
|
1754
1851
|
|
|
1755
|
-
The
|
|
1852
|
+
The Axios serializer appends these fields:
|
|
1756
1853
|
|
|
1757
1854
|
```js
|
|
1758
1855
|
const formData = new FormData();
|
|
@@ -1770,12 +1867,11 @@ formData.append('users[1][surname]', 'Anderson');
|
|
|
1770
1867
|
formData.append('obj2{}', '[{"x":1}]');
|
|
1771
1868
|
```
|
|
1772
1869
|
|
|
1773
|
-
Axios supports
|
|
1774
|
-
which are just the corresponding http methods with the `Content-Type` header preset to `multipart/form-data`.
|
|
1870
|
+
Axios supports `postForm`, `putForm`, and `patchForm` as shortcuts for the matching HTTP methods with the `Content-Type` header preset to `multipart/form-data`.
|
|
1775
1871
|
|
|
1776
|
-
##
|
|
1872
|
+
## Posting files
|
|
1777
1873
|
|
|
1778
|
-
|
|
1874
|
+
Submit a single file:
|
|
1779
1875
|
|
|
1780
1876
|
```js
|
|
1781
1877
|
await axios.postForm('https://httpbin.org/post', {
|
|
@@ -1798,9 +1894,9 @@ await axios.postForm('https://httpbin.org/post', {
|
|
|
1798
1894
|
await axios.postForm('https://httpbin.org/post', document.querySelector('#fileInput').files);
|
|
1799
1895
|
```
|
|
1800
1896
|
|
|
1801
|
-
|
|
1897
|
+
Axios sends all files with the same field name: `files[]`.
|
|
1802
1898
|
|
|
1803
|
-
##
|
|
1899
|
+
## HTML form posting (browser)
|
|
1804
1900
|
|
|
1805
1901
|
Pass an HTML Form element as a payload to submit it as `multipart/form-data` content.
|
|
1806
1902
|
|
|
@@ -1838,7 +1934,7 @@ For example, the Form
|
|
|
1838
1934
|
</form>
|
|
1839
1935
|
```
|
|
1840
1936
|
|
|
1841
|
-
|
|
1937
|
+
submits this JSON object:
|
|
1842
1938
|
|
|
1843
1939
|
```js
|
|
1844
1940
|
{
|
|
@@ -1860,10 +1956,10 @@ will be submitted as the following JSON object:
|
|
|
1860
1956
|
|
|
1861
1957
|
Sending `Blobs`/`Files` as JSON (`base64`) is not currently supported.
|
|
1862
1958
|
|
|
1863
|
-
##
|
|
1959
|
+
## Progress capturing
|
|
1864
1960
|
|
|
1865
|
-
Axios
|
|
1866
|
-
|
|
1961
|
+
Axios can capture request upload and download progress in browsers and Node.js.
|
|
1962
|
+
Progress events are limited to `3` times per second.
|
|
1867
1963
|
|
|
1868
1964
|
```js
|
|
1869
1965
|
await axios.post(url, data, {
|
|
@@ -1909,14 +2005,14 @@ const { data } = await axios.post(SERVER_URL, readableStream, {
|
|
|
1909
2005
|
});
|
|
1910
2006
|
```
|
|
1911
2007
|
|
|
1912
|
-
>
|
|
2008
|
+
> Note:
|
|
1913
2009
|
> Capturing FormData upload progress is not currently supported in node.js environments.
|
|
1914
2010
|
|
|
1915
|
-
>
|
|
1916
|
-
>
|
|
1917
|
-
>
|
|
2011
|
+
> Warning:
|
|
2012
|
+
> Set `maxRedirects: 0` when uploading streams in node.js.
|
|
2013
|
+
> The follow-redirects package buffers the entire stream in RAM and does not follow the "backpressure" algorithm.
|
|
1918
2014
|
|
|
1919
|
-
##
|
|
2015
|
+
## Rate limiting
|
|
1920
2016
|
|
|
1921
2017
|
Download and upload rate limits can only be set for the http adapter (node.js):
|
|
1922
2018
|
|
|
@@ -1930,25 +2026,24 @@ const { data } = await axios.post(LOCAL_SERVER_URL, myBuffer, {
|
|
|
1930
2026
|
});
|
|
1931
2027
|
```
|
|
1932
2028
|
|
|
1933
|
-
##
|
|
2029
|
+
## AxiosHeaders
|
|
1934
2030
|
|
|
1935
|
-
Axios
|
|
1936
|
-
|
|
1937
|
-
|
|
1938
|
-
The old approach of directly manipulating the headers object is still available, but deprecated and not recommended for future usage.
|
|
2031
|
+
Axios includes an `AxiosHeaders` class for working with headers through a Map-like API.
|
|
2032
|
+
HTTP header names are case-insensitive, but Axios keeps the original header case for style and for servers that incorrectly depend on case.
|
|
2033
|
+
Directly manipulating the headers object still works, but it is deprecated.
|
|
1939
2034
|
|
|
1940
2035
|
### Working with headers
|
|
1941
2036
|
|
|
1942
|
-
An AxiosHeaders
|
|
1943
|
-
|
|
2037
|
+
An `AxiosHeaders` instance can contain several internal value types that control setting and merging.
|
|
2038
|
+
Axios gets the final headers object with string values by calling `toJSON`.
|
|
1944
2039
|
|
|
1945
2040
|
> Note: By JSON here we mean an object consisting only of string values intended to be sent over the network.
|
|
1946
2041
|
|
|
1947
2042
|
The header value can be one of the following types:
|
|
1948
2043
|
|
|
1949
|
-
- `string` - normal string value
|
|
2044
|
+
- `string` - normal string value sent to the server
|
|
1950
2045
|
- `null` - skip header when rendering to JSON
|
|
1951
|
-
- `false` - skip header when rendering to JSON
|
|
2046
|
+
- `false` - skip header when rendering to JSON. Also indicates that the `set` method must be called with `rewrite` set to `true`
|
|
1952
2047
|
to overwrite this value (Axios uses this internally to allow users to opt out of installing certain headers like `User-Agent` or `Content-Type`)
|
|
1953
2048
|
- `undefined` - value is not set
|
|
1954
2049
|
|
|
@@ -1965,7 +2060,7 @@ axios.interceptors.request.use((request: InternalAxiosRequestConfig) => {
|
|
|
1965
2060
|
'My-set-header2': 'my-set-value2',
|
|
1966
2061
|
});
|
|
1967
2062
|
|
|
1968
|
-
request.headers.set('User-Agent', false); //
|
|
2063
|
+
request.headers.set('User-Agent', false); // prevent Axios from setting this header later
|
|
1969
2064
|
|
|
1970
2065
|
request.headers.setContentType('text/plain');
|
|
1971
2066
|
|
|
@@ -2033,7 +2128,7 @@ Constructs a new `AxiosHeaders` instance.
|
|
|
2033
2128
|
constructor(headers?: RawAxiosHeaders | AxiosHeaders | string);
|
|
2034
2129
|
```
|
|
2035
2130
|
|
|
2036
|
-
If the headers object is a string,
|
|
2131
|
+
If the headers object is a string, Axios parses it as raw HTTP headers.
|
|
2037
2132
|
|
|
2038
2133
|
```js
|
|
2039
2134
|
const headers = new AxiosHeaders(`
|
|
@@ -2056,6 +2151,7 @@ console.log(headers);
|
|
|
2056
2151
|
set(headerName, value: Axios, rewrite?: boolean);
|
|
2057
2152
|
set(headerName, value, rewrite?: (this: AxiosHeaders, value: string, name: string, headers: RawAxiosHeaders) => boolean);
|
|
2058
2153
|
set(headers?: RawAxiosHeaders | AxiosHeaders | string, rewrite?: boolean);
|
|
2154
|
+
set(headers?: Iterable<[string, AxiosHeaderValue]>, rewrite?: boolean);
|
|
2059
2155
|
```
|
|
2060
2156
|
|
|
2061
2157
|
The `rewrite` argument controls the overwriting behavior:
|
|
@@ -2064,7 +2160,22 @@ The `rewrite` argument controls the overwriting behavior:
|
|
|
2064
2160
|
- `undefined` (default) - overwrite the header unless its value is set to `false`
|
|
2065
2161
|
- `true` - rewrite anyway
|
|
2066
2162
|
|
|
2067
|
-
The option can also accept a user-defined function that determines whether the value
|
|
2163
|
+
The option can also accept a user-defined function that determines whether to overwrite the value.
|
|
2164
|
+
|
|
2165
|
+
Empty or whitespace-only header names are ignored.
|
|
2166
|
+
|
|
2167
|
+
Iterable key/value pairs, such as a `Map`, are accepted:
|
|
2168
|
+
|
|
2169
|
+
```js
|
|
2170
|
+
const headers = new AxiosHeaders();
|
|
2171
|
+
|
|
2172
|
+
headers.set(
|
|
2173
|
+
new Map([
|
|
2174
|
+
['X-Trace-Id', 'abc123'],
|
|
2175
|
+
['Accept', 'application/json'],
|
|
2176
|
+
])
|
|
2177
|
+
);
|
|
2178
|
+
```
|
|
2068
2179
|
|
|
2069
2180
|
Returns `this`.
|
|
2070
2181
|
|
|
@@ -2128,7 +2239,7 @@ clear(matcher?: AxiosHeaderMatcher): boolean;
|
|
|
2128
2239
|
```
|
|
2129
2240
|
|
|
2130
2241
|
Removes all headers.
|
|
2131
|
-
Unlike the `delete` method matcher, this optional matcher
|
|
2242
|
+
Unlike the `delete` method matcher, this optional matcher matches the header name rather than the value.
|
|
2132
2243
|
|
|
2133
2244
|
```ts
|
|
2134
2245
|
const headers = new AxiosHeaders({
|
|
@@ -2172,19 +2283,28 @@ Returns `this`.
|
|
|
2172
2283
|
concat(...targets: Array<AxiosHeaders | RawAxiosHeaders | string | undefined | null>): AxiosHeaders;
|
|
2173
2284
|
```
|
|
2174
2285
|
|
|
2175
|
-
Merges the instance with targets into a new `AxiosHeaders` instance. If the target is a string,
|
|
2286
|
+
Merges the instance with targets into a new `AxiosHeaders` instance. If the target is a string, Axios parses it as raw HTTP headers.
|
|
2176
2287
|
|
|
2177
2288
|
Returns a new `AxiosHeaders` instance.
|
|
2178
2289
|
|
|
2179
2290
|
### AxiosHeaders#toJSON(asStrings?)
|
|
2180
2291
|
|
|
2181
2292
|
```
|
|
2182
|
-
toJSON(asStrings
|
|
2293
|
+
toJSON(asStrings: true): Record<string, string>;
|
|
2294
|
+
toJSON(asStrings?: false): Record<string, string | string[]>;
|
|
2183
2295
|
```
|
|
2184
2296
|
|
|
2185
|
-
|
|
2297
|
+
Resolves all internal header values into a new null prototype object.
|
|
2186
2298
|
Set `asStrings` to true to resolve arrays as a string containing all elements, separated by commas.
|
|
2187
2299
|
|
|
2300
|
+
### AxiosHeaders#toString()
|
|
2301
|
+
|
|
2302
|
+
```
|
|
2303
|
+
toString(): string;
|
|
2304
|
+
```
|
|
2305
|
+
|
|
2306
|
+
Returns the headers as a CRLF-free HTTP header block, one `name: value` pair per line.
|
|
2307
|
+
|
|
2188
2308
|
### AxiosHeaders.from(thing?)
|
|
2189
2309
|
|
|
2190
2310
|
```
|
|
@@ -2192,7 +2312,7 @@ from(thing?: AxiosHeaders | RawAxiosHeaders | string): AxiosHeaders;
|
|
|
2192
2312
|
```
|
|
2193
2313
|
|
|
2194
2314
|
Returns a new `AxiosHeaders` instance created from the raw headers passed in,
|
|
2195
|
-
or
|
|
2315
|
+
or returns the given headers object if it's already an `AxiosHeaders` instance.
|
|
2196
2316
|
|
|
2197
2317
|
### AxiosHeaders.concat(...targets)
|
|
2198
2318
|
|
|
@@ -2216,11 +2336,10 @@ The following shortcuts are available:
|
|
|
2216
2336
|
|
|
2217
2337
|
- `setContentEncoding`, `getContentEncoding`, `hasContentEncoding`
|
|
2218
2338
|
|
|
2219
|
-
##
|
|
2339
|
+
## Fetch adapter
|
|
2220
2340
|
|
|
2221
|
-
|
|
2222
|
-
|
|
2223
|
-
To use it by default, it must be selected explicitly:
|
|
2341
|
+
Axios introduced the fetch adapter in `v1.7.0`. By default, Axios uses it when the `xhr` and `http` adapters are not available in the build or not supported by the environment.
|
|
2342
|
+
To use it by default, select it explicitly:
|
|
2224
2343
|
|
|
2225
2344
|
```js
|
|
2226
2345
|
const { data } = axios.get(url, {
|
|
@@ -2238,20 +2357,21 @@ const fetchAxios = axios.create({
|
|
|
2238
2357
|
const { data } = fetchAxios.get(url);
|
|
2239
2358
|
```
|
|
2240
2359
|
|
|
2241
|
-
The adapter supports the same
|
|
2242
|
-
|
|
2360
|
+
The adapter supports the same features as the `xhr` adapter, including upload and download progress capturing.
|
|
2361
|
+
It also supports response types such as `stream` and `formdata` when the environment supports them.
|
|
2362
|
+
|
|
2363
|
+
When `auth` is omitted, the fetch adapter can read HTTP Basic auth credentials from the request URL, for example `https://user:pass@example.com`. Percent-encoded URL credentials are decoded before the `Authorization` header is generated, and `auth` takes precedence over URL-embedded credentials.
|
|
2243
2364
|
|
|
2244
|
-
###
|
|
2365
|
+
### Custom fetch
|
|
2245
2366
|
|
|
2246
|
-
|
|
2247
|
-
|
|
2248
|
-
This
|
|
2367
|
+
Since `v1.12.0`, you can configure the fetch adapter to use a custom fetch API instead of environment globals.
|
|
2368
|
+
Pass a custom `fetch` function, `Request`, and `Response` constructors through `env` config.
|
|
2369
|
+
This helps in custom environments and app frameworks.
|
|
2249
2370
|
|
|
2250
|
-
|
|
2251
|
-
If your custom fetch
|
|
2252
|
-
you must disable their use inside the fetch adapter by passing null.
|
|
2371
|
+
When using a custom fetch, you may also need to set custom `Request` and `Response` constructors. If you do not set them, Axios uses the global objects.
|
|
2372
|
+
If your custom fetch API does not provide these objects and the globals are incompatible with it, pass `null` to disable them inside the fetch adapter.
|
|
2253
2373
|
|
|
2254
|
-
> Note: Setting `Request`
|
|
2374
|
+
> Note: Setting `Request` and `Response` to `null` prevents the fetch adapter from capturing upload and download progress.
|
|
2255
2375
|
|
|
2256
2376
|
Basic example:
|
|
2257
2377
|
|
|
@@ -2271,7 +2391,7 @@ const instance = axios.create({
|
|
|
2271
2391
|
});
|
|
2272
2392
|
```
|
|
2273
2393
|
|
|
2274
|
-
####
|
|
2394
|
+
#### Using with Tauri
|
|
2275
2395
|
|
|
2276
2396
|
A minimal example of setting up Axios for use in a [Tauri](https://tauri.app/plugin/http-client/) app with a platform fetch function that ignores CORS policy for requests.
|
|
2277
2397
|
|
|
@@ -2292,10 +2412,9 @@ const instance = axios.create({
|
|
|
2292
2412
|
const { data } = await instance.get('https://google.com');
|
|
2293
2413
|
```
|
|
2294
2414
|
|
|
2295
|
-
####
|
|
2415
|
+
#### Using with SvelteKit
|
|
2296
2416
|
|
|
2297
|
-
[SvelteKit](https://svelte.dev/docs/kit/web-standards#Fetch-APIs)
|
|
2298
|
-
which makes it incompatible with the standard URL API. So, Axios must be configured to use the custom fetch API:
|
|
2417
|
+
[SvelteKit](https://svelte.dev/docs/kit/web-standards#Fetch-APIs) uses a custom fetch function for server rendering in `load` functions. It also uses relative paths, which are incompatible with the standard URL API. Configure Axios to use SvelteKit's custom fetch API:
|
|
2299
2418
|
|
|
2300
2419
|
```js
|
|
2301
2420
|
export async function load({ fetch }) {
|
|
@@ -2312,13 +2431,13 @@ export async function load({ fetch }) {
|
|
|
2312
2431
|
}
|
|
2313
2432
|
```
|
|
2314
2433
|
|
|
2315
|
-
#### HTTP/2
|
|
2434
|
+
#### HTTP/2 support
|
|
2316
2435
|
|
|
2317
|
-
Axios supports HTTP/2
|
|
2436
|
+
Axios supports HTTP/2 through the Node.js `http` adapter, introduced in v1.13.0.
|
|
2318
2437
|
|
|
2319
|
-
|
|
2438
|
+
Support depends on the runtime environment. Axios relies on Node.js APIs, so HTTP/2 works in supported Node.js versions but may not work in other environments such as Bun or Deno.
|
|
2320
2439
|
|
|
2321
|
-
Options like `httpVersion` and `http2Options` are adapter-specific and may not behave
|
|
2440
|
+
Options like `httpVersion` and `http2Options` are adapter-specific and may not behave the same way in every environment.
|
|
2322
2441
|
|
|
2323
2442
|
Note: HTTP/2 redirects are currently not supported by the HTTP/2 adapter.
|
|
2324
2443
|
|
|
@@ -2340,7 +2459,7 @@ const { data, headers, status } = await axios.post('https://httpbin.org/post', f
|
|
|
2340
2459
|
|
|
2341
2460
|
## Semver
|
|
2342
2461
|
|
|
2343
|
-
|
|
2462
|
+
Axios follows [semver](https://semver.org/) since `v1.0.0`.
|
|
2344
2463
|
|
|
2345
2464
|
## Promises
|
|
2346
2465
|
|
|
@@ -2365,10 +2484,24 @@ try {
|
|
|
2365
2484
|
}
|
|
2366
2485
|
```
|
|
2367
2486
|
|
|
2368
|
-
|
|
2369
|
-
|
|
2370
|
-
|
|
2371
|
-
|
|
2487
|
+
Use `axios.isCancel<T>()` to narrow cancellation errors to `CanceledError<T>`:
|
|
2488
|
+
|
|
2489
|
+
```typescript
|
|
2490
|
+
const controller = new AbortController();
|
|
2491
|
+
|
|
2492
|
+
try {
|
|
2493
|
+
await axios.get<User>('/user?ID=12345', { signal: controller.signal });
|
|
2494
|
+
} catch (error) {
|
|
2495
|
+
if (axios.isCancel<User>(error)) {
|
|
2496
|
+
handleCancellation(error);
|
|
2497
|
+
}
|
|
2498
|
+
}
|
|
2499
|
+
```
|
|
2500
|
+
|
|
2501
|
+
Because axios publishes an ESM default export and a CJS `module.exports`, TypeScript has a few caveats.
|
|
2502
|
+
The recommended setting is `"moduleResolution": "node16"`, which is implied by `"module": "node16"`. This requires TypeScript 4.7 or greater.
|
|
2503
|
+
If you use ESM, your settings should be fine.
|
|
2504
|
+
If you compile TypeScript to CJS and can't use `"moduleResolution": "node 16"`, enable `esModuleInterop`.
|
|
2372
2505
|
If you use TypeScript to type check CJS JavaScript code, your only option is to use `"moduleResolution": "node16"`.
|
|
2373
2506
|
|
|
2374
2507
|
You can also create a custom instance with typed interceptors:
|
|
@@ -2389,7 +2522,7 @@ apiClient.interceptors.request.use((config: InternalAxiosRequestConfig) => {
|
|
|
2389
2522
|
|
|
2390
2523
|
## Online one-click setup
|
|
2391
2524
|
|
|
2392
|
-
You can use Gitpod,
|
|
2525
|
+
You can use Gitpod, a free online IDE for open source projects, to contribute or run the examples online.
|
|
2393
2526
|
|
|
2394
2527
|
[](https://gitpod.io/#https://github.com/axios/axios/blob/main/examples/server.js)
|
|
2395
2528
|
|
|
@@ -2408,7 +2541,7 @@ npm rebuild husky && npx husky
|
|
|
2408
2541
|
|
|
2409
2542
|
Run those two commands once per fresh checkout. You do **not** need to re-run them after every subsequent `npm install`.
|
|
2410
2543
|
|
|
2411
|
-
Do not remove `ignore-scripts=true` from `.npmrc` to "fix" this
|
|
2544
|
+
Do not remove `ignore-scripts=true` from `.npmrc` to "fix" this. That reopens the lifecycle-script attack surface for every other package in the tree. All CI workflows already invoke npm with `--ignore-scripts`, so local behaviour matches CI.
|
|
2412
2545
|
|
|
2413
2546
|
## Resources
|
|
2414
2547
|
|
|
@@ -2419,7 +2552,7 @@ Do not remove `ignore-scripts=true` from `.npmrc` to "fix" this β that re-open
|
|
|
2419
2552
|
|
|
2420
2553
|
## Credits
|
|
2421
2554
|
|
|
2422
|
-
axios is heavily inspired by the [$http service](https://docs.angularjs.org/api/ng/service/$http)
|
|
2555
|
+
axios is heavily inspired by the [$http service](https://docs.angularjs.org/api/ng/service/$http) in [AngularJS](https://angularjs.org/). It provides a standalone `$http`-like service for use outside AngularJS.
|
|
2423
2556
|
|
|
2424
2557
|
## License
|
|
2425
2558
|
|