Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

extrareqp2

keymetrics4.4mMIT1.0.0TypeScript support: included

Promise based HTTP client for the browser and node.js

xhr, http, ajax, promise, node

readme

axios

npm version CDNJS Build status Gitpod Ready-to-Code code coverage install size npm downloads gitter chat code helpers

Promise based HTTP client for the browser and node.js

New axios docs website: click here

Table of Contents

Features

  • Make XMLHttpRequests from the browser
  • Make http requests from node.js
  • Supports the Promise API
  • Intercept request and response
  • Transform request and response data
  • Cancel requests
  • Automatic transforms for JSON data
  • Client side support for protecting against XSRF

Browser Support

Chrome Firefox Safari Opera Edge IE
Latest ✔ Latest ✔ Latest ✔ Latest ✔ Latest ✔ 11 ✔

Browser Matrix

Installing

Using npm:

$ npm install axios

Using bower:

$ bower install axios

Using yarn:

$ yarn add axios

Using jsDelivr CDN:

<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>

Using unpkg CDN:

<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

Example

note: CommonJS usage

In order to gain the TypeScript typings (for intellisense / autocomplete) while using CommonJS imports with require() use the following approach:

const axios = require('axios').default;

// axios.<method> will now provide autocomplete and parameter typings

Performing a GET request

const axios = require('axios');

// Make a request for a user with a given ID
axios.get('/user?ID=12345')
  .then(function (response) {
    // handle success
    console.log(response);
  })
  .catch(function (error) {
    // handle error
    console.log(error);
  })
  .then(function () {
    // always executed
  });

// Optionally the request above could also be done as
axios.get('/user', {
    params: {
      ID: 12345
    }
  })
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  })
  .then(function () {
    // always executed
  });  

// Want to use async/await? Add the `async` keyword to your outer function/method.
async function getUser() {
  try {
    const response = await axios.get('/user?ID=12345');
    console.log(response);
  } catch (error) {
    console.error(error);
  }
}

NOTE: async/await is part of ECMAScript 2017 and is not supported in Internet Explorer and older browsers, so use with caution.

Performing a POST request

axios.post('/user', {
    firstName: 'Fred',
    lastName: 'Flintstone'
  })
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });

Performing multiple concurrent requests

function getUserAccount() {
  return axios.get('/user/12345');
}

function getUserPermissions() {
  return axios.get('/user/12345/permissions');
}

Promise.all([getUserAccount(), getUserPermissions()])
  .then(function (results) {
    const acct = results[0];
    const perm = results[1];
  });

axios API

Requests can be made by passing the relevant config to axios.

axios(config)
// Send a POST request
axios({
  method: 'post',
  url: '/user/12345',
  data: {
    firstName: 'Fred',
    lastName: 'Flintstone'
  }
});
// GET request for remote image in node.js
axios({
  method: 'get',
  url: 'http://bit.ly/2mTM3nY',
  responseType: 'stream'
})
  .then(function (response) {
    response.data.pipe(fs.createWriteStream('ada_lovelace.jpg'))
  });
axios(url[, config])
// Send a GET request (default method)
axios('/user/12345');

Request method aliases

For convenience aliases have been provided for all supported request methods.

axios.request(config)
axios.get(url[, config])
axios.delete(url[, config])
axios.head(url[, config])
axios.options(url[, config])
axios.post(url[, data[, config]])
axios.put(url[, data[, config]])
axios.patch(url[, data[, config]])
NOTE

When using the alias methods url, method, and data properties don't need to be specified in config.

Concurrency (Deprecated)

Please use Promise.all to replace the below functions.

Helper functions for dealing with concurrent requests.

axios.all(iterable) axios.spread(callback)

Creating an instance

You can create a new instance of axios with a custom config.

axios.create([config])
const instance = axios.create({
  baseURL: 'https://some-domain.com/api/',
  timeout: 1000,
  headers: {'X-Custom-Header': 'foobar'}
});

Instance methods

The available instance methods are listed below. The specified config will be merged with the instance config.

axios#request(config)
axios#get(url[, config])
axios#delete(url[, config])
axios#head(url[, config])
axios#options(url[, config])
axios#post(url[, data[, config]])
axios#put(url[, data[, config]])
axios#patch(url[, data[, config]])
axios#getUri([config])

Request Config

These are the available config options for making requests. Only the url is required. Requests will default to GET if method is not specified.

{
  // `url` is the server URL that will be used for the request
  url: '/user',

  // `method` is the request method to be used when making the request
  method: 'get', // default

  // `baseURL` will be prepended to `url` unless `url` is absolute.
  // It can be convenient to set `baseURL` for an instance of axios to pass relative URLs
  // to methods of that instance.
  baseURL: 'https://some-domain.com/api/',

  // `transformRequest` allows changes to the request data before it is sent to the server
  // This is only applicable for request methods 'PUT', 'POST', 'PATCH' and 'DELETE'
  // The last function in the array must return a string or an instance of Buffer, ArrayBuffer,
  // FormData or Stream
  // You may modify the headers object.
  transformRequest: [function (data, headers) {
    // Do whatever you want to transform the data

    return data;
  }],

  // `transformResponse` allows changes to the response data to be made before
  // it is passed to then/catch
  transformResponse: [function (data) {
    // Do whatever you want to transform the data

    return data;
  }],

  // `headers` are custom headers to be sent
  headers: {'X-Requested-With': 'XMLHttpRequest'},

  // `params` are the URL parameters to be sent with the request
  // Must be a plain object or a URLSearchParams object
  params: {
    ID: 12345
  },

  // `paramsSerializer` is an optional function in charge of serializing `params`
  // (e.g. https://www.npmjs.com/package/qs, http://api.jquery.com/jquery.param/)
  paramsSerializer: function (params) {
    return Qs.stringify(params, {arrayFormat: 'brackets'})
  },

  // `data` is the data to be sent as the request body
  // Only applicable for request methods 'PUT', 'POST', 'DELETE , and 'PATCH'
  // When no `transformRequest` is set, must be of one of the following types:
  // - string, plain object, ArrayBuffer, ArrayBufferView, URLSearchParams
  // - Browser only: FormData, File, Blob
  // - Node only: Stream, Buffer
  data: {
    firstName: 'Fred'
  },

  // syntax alternative to send data into the body
  // method post
  // only the value is sent, not the key
  data: 'Country=Brasil&City=Belo Horizonte',

  // `timeout` specifies the number of milliseconds before the request times out.
  // If the request takes longer than `timeout`, the request will be aborted.
  timeout: 1000, // default is `0` (no timeout)

  // `withCredentials` indicates whether or not cross-site Access-Control requests
  // should be made using credentials
  withCredentials: false, // default

  // `adapter` allows custom handling of requests which makes testing easier.
  // Return a promise and supply a valid response (see lib/adapters/README.md).
  adapter: function (config) {
    /* ... */
  },

  // `auth` indicates that HTTP Basic auth should be used, and supplies credentials.
  // This will set an `Authorization` header, overwriting any existing
  // `Authorization` custom headers you have set using `headers`.
  // Please note that only HTTP Basic auth is configurable through this parameter.
  // For Bearer tokens and such, use `Authorization` custom headers instead.
  auth: {
    username: 'janedoe',
    password: 's00pers3cret'
  },

  // `responseType` indicates the type of data that the server will respond with
  // options are: 'arraybuffer', 'document', 'json', 'text', 'stream'
  //   browser only: 'blob'
  responseType: 'json', // default

  // `responseEncoding` indicates encoding to use for decoding responses (Node.js only)
  // Note: Ignored for `responseType` of 'stream' or client-side requests
  responseEncoding: 'utf8', // default

  // `xsrfCookieName` is the name of the cookie to use as a value for xsrf token
  xsrfCookieName: 'XSRF-TOKEN', // default

  // `xsrfHeaderName` is the name of the http header that carries the xsrf token value
  xsrfHeaderName: 'X-XSRF-TOKEN', // default

  // `onUploadProgress` allows handling of progress events for uploads
  // browser only
  onUploadProgress: function (progressEvent) {
    // Do whatever you want with the native progress event
  },

  // `onDownloadProgress` allows handling of progress events for downloads
  // browser only
  onDownloadProgress: function (progressEvent) {
    // Do whatever you want with the native progress event
  },

  // `maxContentLength` defines the max size of the http response content in bytes allowed in node.js
  maxContentLength: 2000,

  // `maxBodyLength` (Node only option) defines the max size of the http request content in bytes allowed
  maxBodyLength: 2000,

  // `validateStatus` defines whether to resolve or reject the promise for a given
  // HTTP response status code. If `validateStatus` returns `true` (or is set to `null`
  // or `undefined`), the promise will be resolved; otherwise, the promise will be
  // rejected.
  validateStatus: function (status) {
    return status >= 200 && status < 300; // default
  },

  // `maxRedirects` defines the maximum number of redirects to follow in node.js.
  // If set to 0, no redirects will be followed.
  maxRedirects: 5, // default

  // `socketPath` defines a UNIX Socket to be used in node.js.
  // e.g. '/var/run/docker.sock' to send requests to the docker daemon.
  // Only either `socketPath` or `proxy` can be specified.
  // If both are specified, `socketPath` is used.
  socketPath: null, // default

  // `httpAgent` and `httpsAgent` define a custom agent to be used when performing http
  // and https requests, respectively, in node.js. This allows options to be added like
  // `keepAlive` that are not enabled by default.
  httpAgent: new http.Agent({ keepAlive: true }),
  httpsAgent: new https.Agent({ keepAlive: true }),

  // `proxy` defines the hostname, port, and protocol of the proxy server.
  // You can also define your proxy using the conventional `http_proxy` and
  // `https_proxy` environment variables. If you are using environment variables
  // for your proxy configuration, you can also define a `no_proxy` environment
  // variable as a comma-separated list of domains that should not be proxied.
  // Use `false` to disable proxies, ignoring environment variables.
  // `auth` indicates that HTTP Basic auth should be used to connect to the proxy, and
  // supplies credentials.
  // This will set an `Proxy-Authorization` header, overwriting any existing
  // `Proxy-Authorization` custom headers you have set using `headers`.
  // If the proxy server uses HTTPS, then you must set the protocol to `https`. 
  proxy: {
    protocol: 'https',
    host: '127.0.0.1',
    port: 9000,
    auth: {
      username: 'mikeymike',
      password: 'rapunz3l'
    }
  },

  // `cancelToken` specifies a cancel token that can be used to cancel the request
  // (see Cancellation section below for details)
  cancelToken: new CancelToken(function (cancel) {
  }),

  // `decompress` indicates whether or not the response body should be decompressed 
  // automatically. If set to `true` will also remove the 'content-encoding' header 
  // from the responses objects of all decompressed responses
  // - Node only (XHR cannot turn off decompression)
  decompress: true, // default

  // transitional options for backward compatibility that may be removed in the newer versions
  transitional: {
    // silent JSON parsing mode
    // `true`  - ignore JSON parsing errors and set response.data to null if parsing failed (old behaviour)
    // `false` - throw SyntaxError if JSON parsing failed (Note: responseType must be set to 'json')
    silentJSONParsing: true, // default value for the current Axios version

    // try to parse the response string as JSON even if `responseType` is not 'json'
    forcedJSONParsing: true,

    // throw ETIMEDOUT error instead of generic ECONNABORTED on request timeouts
    clarifyTimeoutError: false,
  }
}

Response Schema

The response for a request contains the following information.

{
  // `data` is the response that was provided by the server
  data: {},

  // `status` is the HTTP status code from the server response
  status: 200,

  // `statusText` is the HTTP status message from the server response
  statusText: 'OK',

  // `headers` the HTTP headers that the server responded with
  // All header names are lower cased and can be accessed using the bracket notation.
  // Example: `response.headers['content-type']`
  headers: {},

  // `config` is the config that was provided to `axios` for the request
  config: {},

  // `request` is the request that generated this response
  // It is the last ClientRequest instance in node.js (in redirects)
  // and an XMLHttpRequest instance in the browser
  request: {}
}

When using then, you will receive the response as follows:

axios.get('/user/12345')
  .then(function (response) {
    console.log(response.data);
    console.log(response.status);
    console.log(response.statusText);
    console.log(response.headers);
    console.log(response.config);
  });

When using catch, or passing a rejection callback as second parameter of then, the response will be available through the error object as explained in the Handling Errors section.

Config Defaults

You can specify config defaults that will be applied to every request.

Global axios defaults

axios.defaults.baseURL = 'https://api.example.com';

// Important: If axios is used with multiple domains, the AUTH_TOKEN will be sent to all of them.
// See below for an example using Custom instance defaults instead.
axios.defaults.headers.common['Authorization'] = AUTH_TOKEN;

axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';

Custom instance defaults

// Set config defaults when creating the instance
const instance = axios.create({
  baseURL: 'https://api.example.com'
});

// Alter defaults after instance has been created
instance.defaults.headers.common['Authorization'] = AUTH_TOKEN;

Config order of precedence

Config will be merged with an order of precedence. The order is library defaults found in lib/defaults.js, then defaults property of the instance, and finally config argument for the request. The latter will take precedence over the former. Here's an example.

// Create an instance using the config defaults provided by the library
// At this point the timeout config value is `0` as is the default for the library
const instance = axios.create();

// Override timeout default for the library
// Now all requests using this instance will wait 2.5 seconds before timing out
instance.defaults.timeout = 2500;

// Override timeout for this request as it's known to take a long time
instance.get('/longRequest', {
  timeout: 5000
});

Interceptors

You can intercept requests or responses before they are handled by then or catch.

// Add a request interceptor
axios.interceptors.request.use(function (config) {
    // Do something before request is sent
    return config;
  }, function (error) {
    // Do something with request error
    return Promise.reject(error);
  });

// Add a response interceptor
axios.interceptors.response.use(function (response) {
    // Any status code that lie within the range of 2xx cause this function to trigger
    // Do something with response data
    return response;
  }, function (error) {
    // Any status codes that falls outside the range of 2xx cause this function to trigger
    // Do something with response error
    return Promise.reject(error);
  });

If you need to remove an interceptor later you can.

const myInterceptor = axios.interceptors.request.use(function () {/*...*/});
axios.interceptors.request.eject(myInterceptor);

You can add interceptors to a custom instance of axios.

const instance = axios.create();
instance.interceptors.request.use(function () {/*...*/});

When you add request interceptors, they are presumed to be asynchronous by default. This can cause a delay in the execution of your axios request when the main thread is blocked (a promise is created under the hood for the interceptor and your request gets put on the bottom of the call stack). If your request interceptors are synchronous you can add a flag to the options object that will tell axios to run the code synchronously and avoid any delays in request execution.

axios.interceptors.request.use(function (config) {
  config.headers.test = 'I am only a header!';
  return config;
}, null, { synchronous: true });

If you want to execute a particular interceptor based on a runtime check, you can add a runWhen function to the options object. The interceptor will not be executed if and only if the return of runWhen is false. The function will be called with the config object (don't forget that you can bind your own arguments to it as well.) This can be handy when you have an asynchronous request interceptor that only needs to run at certain times.

function onGetCall(config) {
  return config.method === 'get';
}
axios.interceptors.request.use(function (config) {
  config.headers.test = 'special get headers';
  return config;
}, null, { runWhen: onGetCall });

Handling Errors

axios.get('/user/12345')
  .catch(function (error) {
    if (error.response) {
      // The request was made and the server responded with a status code
      // that falls out of the range of 2xx
      console.log(error.response.data);
      console.log(error.response.status);
      console.log(error.response.headers);
    } else if (error.request) {
      // The request was made but no response was received
      // `error.request` is an instance of XMLHttpRequest in the browser and an instance of
      // http.ClientRequest in node.js
      console.log(error.request);
    } else {
      // Something happened in setting up the request that triggered an Error
      console.log('Error', error.message);
    }
    console.log(error.config);
  });

Using the validateStatus config option, you can define HTTP code(s) that should throw an error.

axios.get('/user/12345', {
  validateStatus: function (status) {
    return status < 500; // Resolve only if the status code is less than 500
  }
})

Using toJSON you get an object with more information about the HTTP error.

axios.get('/user/12345')
  .catch(function (error) {
    console.log(error.toJSON());
  });

Cancellation

You can cancel a request using a cancel token.

The axios cancel token API is based on the withdrawn cancelable promises proposal.

You can create a cancel token using the CancelToken.source factory as shown below:

const CancelToken = axios.CancelToken;
const source = CancelToken.source();

axios.get('/user/12345', {
  cancelToken: source.token
}).catch(function (thrown) {
  if (axios.isCancel(thrown)) {
    console.log('Request canceled', thrown.message);
  } else {
    // handle error
  }
});

axios.post('/user/12345', {
  name: 'new name'
}, {
  cancelToken: source.token
})

// cancel the request (the message parameter is optional)
source.cancel('Operation canceled by the user.');

You can also create a cancel token by passing an executor function to the CancelToken constructor:

const CancelToken = axios.CancelToken;
let cancel;

axios.get('/user/12345', {
  cancelToken: new CancelToken(function executor(c) {
    // An executor function receives a cancel function as a parameter
    cancel = c;
  })
});

// cancel the request
cancel();

Note: you can cancel several requests with the same cancel token. If a cancellation token is already cancelled at the moment of starting an Axios request, then the request is cancelled immediately, without any attempts to make real request.

Using application/x-www-form-urlencoded format

By default, axios serializes JavaScript objects to JSON. To send data in the application/x-www-form-urlencoded format instead, you can use one of the following options.

Browser

In a browser, you can use the URLSearchParams API as follows:

const params = new URLSearchParams();
params.append('param1', 'value1');
params.append('param2', 'value2');
axios.post('/foo', params);

Note that URLSearchParams is not supported by all browsers (see caniuse.com), but there is a polyfill available (make sure to polyfill the global environment).

Alternatively, you can encode data using the qs library:

const qs = require('qs');
axios.post('/foo', qs.stringify({ 'bar': 123 }));

Or in another way (ES6),

import qs from 'qs';
const data = { 'bar': 123 };
const options = {
  method: 'POST',
  headers: { 'content-type': 'application/x-www-form-urlencoded' },
  data: qs.stringify(data),
  url,
};
axios(options);

Node.js

Query string

In node.js, you can use the querystring module as follows:

const querystring = require('querystring');
axios.post('http://something.com/', querystring.stringify({ foo: 'bar' }));

or 'URLSearchParams' from 'url module' as follows:

const url = require('url');
const params = new url.URLSearchParams({ foo: 'bar' });
axios.post('http://something.com/', params.toString());

You can also use the qs library.

NOTE

The qs library is preferable if you need to stringify nested objects, as the querystring method has known issues with that use case (https://github.com/nodejs/node-v0.x-archive/issues/1665).

Form data

In node.js, you can use the form-data library as follows:

const FormData = require('form-data');

const form = new FormData();
form.append('my_field', 'my value');
form.append('my_buffer', new Buffer(10));
form.append('my_file', fs.createReadStream('/foo/bar.jpg'));

axios.post('https://example.com', form, { headers: form.getHeaders() })

Alternatively, use an interceptor:

axios.interceptors.request.use(config => {
  if (config.data instanceof FormData) {
    Object.assign(config.headers, config.data.getHeaders());
  }
  return config;
});

Semver

Until axios reaches a 1.0 release, breaking changes will be released with a new minor version. For example 0.5.1, and 0.5.4 will have the same API, but 0.6.0 will have breaking changes.

Promises

axios depends on a native ES6 Promise implementation to be supported. If your environment doesn't support ES6 Promises, you can polyfill.

TypeScript

axios includes TypeScript definitions and a type guard for axios errors.

let user: User = null;
try {
  const { data } = await axios.get('/user?ID=12345');
  user = data.userDetails;
} catch (error) {
  if (axios.isAxiosError(error)) {
    handleAxiosError(error);
  } else {
    handleUnexpectedError(error);
  }
}

Online one-click setup

You can use Gitpod an online IDE(which is free for Open Source) for contributing or running the examples online.

Open in Gitpod

Resources

Credits

axios is heavily inspired by the $http service provided in Angular. Ultimately axios is an effort to provide a standalone $http-like service for use outside of Angular.

License

MIT

changelog

Changelog

0.21.4 (September 6, 2021)

Fixes and Functionality:

  • Fixing JSON transform when data is stringified. Providing backward compatibility and complying to the JSON RFC standard (#4020)

Huge thanks to everyone who contributed to this release via code (authors listed below) or via reviews and triaging on GitHub:

0.21.3 (September 4, 2021)

Fixes and Functionality:

  • Fixing response interceptor not being called when request interceptor is attached (#4013)

Huge thanks to everyone who contributed to this release via code (authors listed below) or via reviews and triaging on GitHub:

0.21.2 (September 4, 2021)

Fixes and Functionality:

  • Updating axios requests to be delayed by pre-emptive promise creation (#2702)
  • Adding "synchronous" and "runWhen" options to interceptors api (#2702)
  • Updating of transformResponse (#3377)
  • Adding ability to omit User-Agent header (#3703)
  • Adding multiple JSON improvements (#3688, #3763)
  • Fixing quadratic runtime and extra memory usage when setting a maxContentLength (#3738)
  • Adding parseInt to config.timeout (#3781)
  • Adding custom return type support to interceptor (#3783)
  • Adding security fix for ReDoS vulnerability (#3980)

Internal and Tests:

  • Updating build dev dependancies (#3401)
  • Fixing builds running on Travis CI (#3538)
  • Updating follow rediect version (#3694, #3771)
  • Updating karma sauce launcher to fix failing sauce tests (#3712, #3717)
  • Updating content-type header for application/json to not contain charset field, according do RFC 8259 (#2154)
  • Fixing tests by bumping karma-sauce-launcher version (#3813)
  • Changing testing process from Travis CI to GitHub Actions (#3938)

Documentation:

  • Updating documentation around the use of AUTH_TOKEN with multiple domain endpoints (#3539)
  • Remove duplication of item in changelog (#3523)
  • Fixing gramatical errors (#2642)
  • Fixing spelling error (#3567)
  • Moving gitpod metion (#2637)
  • Adding new axios documentation website link (#3681, #3707)
  • Updating documentation around dispatching requests (#3772)
  • Adding documentation for the type guard isAxiosError (#3767)
  • Adding explanation of cancel token (#3803)
  • Updating CI status badge (#3953)
  • Fixing errors with JSON documentation (#3936)
  • Fixing README typo under Request Config (#3825)
  • Adding axios-multi-api to the ecosystem file (#3817)
  • Adding SECURITY.md to properly disclose security vulnerabilities (#3981)

Huge thanks to everyone who contributed to this release via code (authors listed below) or via reviews and triaging on GitHub:

0.21.1 (December 21, 2020)

Fixes and Functionality:

  • Hotfix: Prevent SSRF (#3410)
  • Protocol not parsed when setting proxy config from env vars (#3070)
  • Updating axios in types to be lower case (#2797)
  • Adding a type guard for AxiosError (#2949)

Internal and Tests:

  • Remove the skipping of the socket http test (#3364)
  • Use different socket for Win32 test (#3375)

Huge thanks to everyone who contributed to this release via code (authors listed below) or via reviews and triaging on GitHub:

0.21.0 (October 23, 2020)

Fixes and Functionality:

  • Fixing requestHeaders.Authorization (#3287)
  • Fixing node types (#3237)
  • Fixing axios.delete ignores config.data (#3282)
  • Revert "Fixing overwrite Blob/File type as Content-Type in browser. (#1773)" (#3289)
  • Fixing an issue that type 'null' and 'undefined' is not assignable to validateStatus when typescript strict option is enabled (#3200)

Internal and Tests:

  • Lock travis to not use node v15 (#3361)

Documentation:

  • Fixing simple typo, existant -> existent (#3252)
  • Fixing typos (#3309)

Huge thanks to everyone who contributed to this release via code (authors listed below) or via reviews and triaging on GitHub:

0.20.0 (August 20, 2020)

Release of 0.20.0-pre as a full release with no other changes.

0.20.0-pre (July 15, 2020)

Fixes and Functionality:

  • Fixing response with utf-8 BOM can not parse to json (#2419)
    • fix: remove byte order marker (UTF-8 BOM) when transform response
    • fix: remove BOM only utf-8
    • test: utf-8 BOM
    • fix: incorrect param name
  • Refactor mergeConfig without utils.deepMerge (#2844)
    • Adding failing test
    • Fixing #2587 default custom config persisting
    • Adding Concat keys and filter duplicates
    • Fixed value from CPE
    • update for review feedbacks
    • no deepMerge
    • only merge between plain objects
    • fix rename
    • always merge config by mergeConfig
    • extract function mergeDeepProperties
    • refactor mergeConfig with all keys, and add special logic for validateStatus
    • add test for resetting headers
    • add lots of tests and fix a bug
    • should not inherit data
    • use simple toString
  • Fixing overwrite Blob/File type as Content-Type in browser. (#1773)
  • Fixing an issue that type 'null' is not assignable to validateStatus (#2773)
  • Fixing special char encoding (#1671)
    • removing @ character from replacement list since it is a reserved character
    • Updating buildURL test to not include the @ character
    • Removing console logs
  • Fixing password encoding with special characters in basic authentication (#1492)
    • Fixing password encoding with special characters in basic authentication
    • Adding test to check if password with non-Latin1 characters pass
  • Fixing 'Network Error' in react native android (#1487) There is a bug in react native Android platform when using get method. It will trigger a 'Network Error' when passing the requestData which is an empty string to request.send function. So if the requestData is an empty string we can set it to null as well to fix the bug.
  • Fixing Cookie Helper with Async Components (#1105) (#1107)
  • Fixing 'progressEvent' type (#2851)
    • Fix 'progressEvent' type
    • Update axios.ts
  • Fixing getting local files (file://) failed (#2470)
    • fix issue #2416, #2396
    • fix Eslint warn
    • Modify judgment conditions
    • add unit test
    • update unit test
    • update unit test
  • Allow PURGE method in typings (#2191)
  • Adding option to disable automatic decompression (#2661)
    • Adding ability to disable auto decompression
    • Updating decompress documentation in README
    • Fixing test\unit\adapters\http.js lint errors
    • Adding test for disabling auto decompression
    • Removing changes that fixed lint errors in tests
    • Removing formatting change to unit test
  • Add independent maxBodyLength option (#2781)
    • Add independent option to set the maximum size of the request body
    • Remove maxBodyLength check
    • Update README
    • Assert for error code and message
  • Adding responseEncoding to mergeConfig (#1745)
  • Compatible with follow-redirect aborts the request (#2689)
    • Compatible with follow-redirect aborts the request
    • Use the error code
  • Fix merging of params (#2656)
    • Name function to avoid ESLint func-names warning
    • Switch params config to merge list and update tests
    • Restore testing of both false and null
    • Restore test cases for keys without defaults
    • Include test for non-object values that aren't false-y.
  • Revert finally as then (#2683)

Internal and Tests:

  • Fix stale bot config (#3049)
    • fix stale bot config
    • fix multiple lines
  • Add days and change name to work (#3035)
  • Update close-issues.yml (#3031)
    • Update close-issues.yml Update close message to read better 😄
    • Fix use of quotations Use single quotes as per other .yml files
    • Remove user name form message
  • Add GitHub actions to close stale issues/prs (#3029)
    • prepare stale actions
    • update messages
    • Add exempt labels and lighten up comments
  • Add GitHub actions to close invalid issues (#3022)
    • add close actions
    • fix with checkout
    • update issue templates
    • add reminder
    • update close message
  • Add test with Node.js 12 (#2860)
    • test with Node.js 12
    • test with latest
  • Adding console log on sandbox server startup (#2210)
    • Adding console log on sandbox server startup
    • Update server.js Add server error handling
    • Update server.js Better error message, remove retry.
  • Adding tests for method options type definitions (#1996) Update tests.
  • Add test for redirecting with too large response (#2695)
  • Fixing unit test failure in Windows OS (#2601)
  • Fixing issue for HEAD method and gzipped response (#2666)
  • Fix tests in browsers (#2748)
  • chore: add jsdelivr and unpkg support (#2443)

Documentation:

  • Adding support for URLSearchParams in node (#1900)
    • Adding support for URLSearchParams in node
    • Remove un-needed code
    • Update utils.js
    • Make changes as suggested
  • Adding table of content (preview) (#3050)
    • add toc (preview)
    • remove toc in toc Signed-off-by: Moni usmoni@gmail.com
    • fix sublinks
    • fix indentation
    • remove redundant table links
    • update caps and indent
    • remove axios
  • Replace 'blacklist' with 'blocklist' (#3006)
  • docs(): Detailed config options environment. (#2088)
    • docs(): Detailed config options environment.
    • Update README.md
  • Include axios-data-unpacker in ECOSYSTEM.md (#2080)
  • Allow opening examples in Gitpod (#1958)
  • Remove axios.all() and axios.spread() from Readme.md (#2727)
    • remove axios.all(), axios.spread()
    • replace example
    • axios.all() -> Promise.all()
    • axios.spread(function (acct, perms)) -> function (acct, perms)
    • add deprecated mark
  • Update README.md (#2887) Small change to the data attribute doc of the config. A request body can also be set for DELETE methods but this wasn't mentioned in the documentation (it only mentioned POST, PUT and PATCH). Took my some 10-20 minutes until I realized that I don't need to manipulate the request body with transformRequest in the case of DELETE.
  • Include swagger-taxos-codegen in ECOSYSTEM.md (#2162)
  • Add CDNJS version badge in README.md (#878) This badge will show the version on CDNJS!
  • Documentation update to clear up ambiguity in code examples (#2928)
    • Made an adjustment to the documentation to clear up any ambiguity around the use of "fs". This should help clear up that the code examples with "fs" cannot be used on the client side.
  • Update README.md about validateStatus (#2912) Rewrote the comment from "Reject only if the status code is greater than or equal to 500" to "Resolve only if the status code is less than 500"
  • Updating documentation for usage form-data (#2805) Closes #2049
  • Fixing CHANGELOG.md issue link (#2784)
  • Include axios-hooks in ECOSYSTEM.md (#2003)
  • Added Response header access instructions (#1901)
    • Added Response header access instructions
    • Added note about using bracket notation
  • Add onUploadProgress and onDownloadProgress are browser only (#2763) Saw in #928 and #1966 that onUploadProgress and onDownloadProgress only work in the browser and was missing that from the README.
  • Update ' sign to ` in proxy spec (#2778)
  • Adding jsDelivr link in README (#1110)
    • Adding jsDelivr link
    • Add SRI
    • Remove SRI

Huge thanks to everyone who contributed to this release via code (authors listed below) or via reviews and triaging on GitHub:

0.19.2 (Jan 20, 2020)

  • Remove unnecessary XSS check (#2679) (see (#2646) for discussion)

0.19.1 (Jan 7, 2020)

Fixes and Functionality:

  • Fixing invalid agent issue (#1904)
  • Fix ignore set withCredentials false (#2582)
  • Delete useless default to hash (#2458)
  • Fix HTTP/HTTPs agents passing to follow-redirect (#1904)
  • Fix ignore set withCredentials false (#2582)
  • Fix CI build failure (#2570)
  • Remove dependency on is-buffer from package.json (#1816)
  • Adding options typings (#2341)
  • Adding Typescript HTTP method definition for LINK and UNLINK. (#2444)
  • Update dist with newest changes, fixes Custom Attributes issue
  • Change syntax to see if build passes (#2488)
  • Update Webpack + deps, remove now unnecessary polyfills (#2410)
  • Fix to prevent XSS, throw an error when the URL contains a JS script (#2464)
  • Add custom timeout error copy in config (#2275)
  • Add error toJSON example (#2466)
  • Fixing Vulnerability A Fortify Scan finds a critical Cross-Site Scrip… (#2451)
  • Fixing subdomain handling on no_proxy (#2442)
  • Make redirection from HTTP to HTTPS work (#2426) and (#2547)
  • Add toJSON property to AxiosError type (#2427)
  • Fixing socket hang up error on node side for slow response. (#1752)
  • Alternative syntax to send data into the body (#2317)
  • Fixing custom config options (#2207)
  • Fixing set config.method after mergeConfig for Axios.prototype.request (#2383)
  • Axios create url bug (#2290)
  • Do not modify config.url when using a relative baseURL (resolves #1628) (#2391)

Internal:

  • Revert "Update Webpack + deps, remove now unnecessary polyfills" (#2479)
  • Order of if/else blocks is causing unit tests mocking XHR. (#2201)
  • Add license badge (#2446)
  • Fix travis CI build #2386
  • Fix cancellation error on build master. #2290 #2207 (#2407)

Documentation:

  • Fixing typo in CHANGELOG.md: s/Functionallity/Functionality (#2639)
  • Fix badge, use master branch (#2538)
  • Fix typo in changelog #2193
  • Document fix (#2514)
  • Update docs with no_proxy change, issue #2484 (#2513)
  • Fixing missing words in docs template (#2259)
  • 🐛Fix request finally documentation in README (#2189)
  • updating spelling and adding link to docs (#2212)
  • docs: minor tweak (#2404)
  • Update response interceptor docs (#2399)
  • Update README.md (#2504)
  • Fix word 'sintaxe' to 'syntax' in README.md (#2432)
  • updating README: notes on CommonJS autocomplete (#2256)
  • Fix grammar in README.md (#2271)
  • Doc fixes, minor examples cleanup (#2198)

0.19.0 (May 30, 2019)

Fixes and Functionality:

  • Added support for no_proxy env variable (#1693) - Chance Dickson
  • Unzip response body only for statuses != 204 (#1129) - drawski
  • Destroy stream on exceeding maxContentLength (fixes #1098) (#1485) - Gadzhi Gadzhiev
  • Makes Axios error generic to use AxiosResponse (#1738) - Suman Lama
  • Fixing Mocha tests by locking follow-redirects version to 1.5.10 (#1993) - grumblerchester
  • Allow uppercase methods in typings. (#1781) - Ken Powers
  • Fixing building url with hash mark (#1771) - Anatoly Ryabov
  • This commit fix building url with hash map (fragment identifier) when parameters are present: they must not be added after #, because client cut everything after #
  • Preserve HTTP method when following redirect (#1758) - Rikki Gibson
  • Add getUri signature to TypeScript definition. (#1736) - Alexander Trauzzi
  • Adding isAxiosError flag to errors thrown by axios (#1419) - Ayush Gupta

Internal:

  • Fixing .eslintrc without extension (#1789) - Manoel
  • Fix failing SauceLabs tests by updating configuration - Emily Morehouse
  • Add issue templates - Emily Morehouse

Documentation:

  • Consistent coding style in README (#1787) - Ali Servet Donmez
  • Add information about auth parameter to README (#2166) - xlaguna
  • Add DELETE to list of methods that allow data as a config option (#2169) - Daniela Borges Matos de Carvalho
  • Update ECOSYSTEM.md - Add Axios Endpoints (#2176) - Renan
  • Add r2curl in ECOSYSTEM (#2141) - 유용우 / CX
  • Update README.md - Add instructions for installing with yarn (#2036) - Victor Hermes
  • Fixing spacing for README.md (#2066) - Josh McCarty
  • Update README.md. - Change .then to .finally in example code (#2090) - Omar Cai
  • Clarify what values responseType can have in Node (#2121) - Tyler Breisacher
  • docs(ECOSYSTEM): add axios-api-versioning (#2020) - Weffe
  • It seems that responseType: 'blob' doesn't actually work in Node (when I tried using it, response.data was a string, not a Blob, since Node doesn't have Blobs), so this clarifies that this option should only be used in the browser
  • Update README.md. - Add Querystring library note (#1896) - Dmitriy Eroshenko
  • Add react-hooks-axios to Libraries section of ECOSYSTEM.md (#1925) - Cody Chan
  • Clarify in README that default timeout is 0 (no timeout) (#1750) - Ben Standefer

0.19.0-beta.1 (Aug 9, 2018)

NOTE: This is a beta version of this release. There may be functionality that is broken in certain browsers, though we suspect that builds are hanging and not erroring. See https://saucelabs.com/u/axios for the most up-to-date information.

New Functionality:

  • Add getUri method (#1712)
  • Add support for no_proxy env variable (#1693)
  • Add toJSON to decorated Axios errors to facilitate serialization (#1625)
  • Add second then on axios call (#1623)
  • Typings: allow custom return types
  • Add option to specify character set in responses (with http adapter)

Fixes:

  • Fix Keep defaults local to instance (#385)
  • Correctly catch exception in http test (#1475)
  • Fix accept header normalization (#1698)
  • Fix http adapter to allow HTTPS connections via HTTP (#959)
  • Fix Removes usage of deprecated Buffer constructor. (#1555, #1622)
  • Fix defaults to use httpAdapter if available (#1285)
    • Fixing defaults to use httpAdapter if available
    • Use a safer, cross-platform method to detect the Node environment
  • Fix Reject promise if request is cancelled by the browser (#537)
  • [Typescript] Fix missing type parameters on delete/head methods
  • [NS]: Send false flag isStandardBrowserEnv for Nativescript
  • Fix missing type parameters on delete/head
  • Fix Default method for an instance always overwritten by get
  • Fix type error when socketPath option in AxiosRequestConfig
  • Capture errors on request data streams
  • Decorate resolve and reject to clear timeout in all cases

Huge thanks to everyone who contributed to this release via code (authors listed below) or via reviews and triaging on GitHub:

0.18.0 (Feb 19, 2018)

  • Adding support for UNIX Sockets when running with Node.js (#1070)
  • Fixing typings (#1177):
    • AxiosRequestConfig.proxy: allows type false
    • AxiosProxyConfig: added auth field
  • Adding function signature in AxiosInstance interface so AxiosInstance can be invoked (#1192, #1254)
  • Allowing maxContentLength to pass through to redirected calls as maxBodyLength in follow-redirects config (#1287)
  • Fixing configuration when using an instance - method can now be set (#1342)

0.17.1 (Nov 11, 2017)

  • Fixing issue with web workers (#1160)
  • Allowing overriding transport (#1080)
  • Updating TypeScript typings (#1165, #1125, #1131)

0.17.0 (Oct 21, 2017)

  • BREAKING Fixing issue with baseURL and interceptors (#950)
  • BREAKING Improving handing of duplicate headers (#874)
  • Adding support for disabling proxies (#691)
  • Updating TypeScript typings with generic type parameters (#1061)

0.16.2 (Jun 3, 2017)

  • Fixing issue with including buffer in bundle (#887)
  • Including underlying request in errors (#830)
  • Convert method to lowercase (#930)

0.16.1 (Apr 8, 2017)

  • Improving HTTP adapter to return last request in case of redirects (#828)
  • Updating follow-redirects dependency (#829)
  • Adding support for passing Buffer in node (#773)

0.16.0 (Mar 31, 2017)

  • BREAKING Removing Promise from axios typings in favor of built-in type declarations (#480)
  • Adding options shortcut method (#461)
  • Fixing issue with using responseType: 'json' in browsers incompatible with XHR Level 2 (#654)
  • Improving React Native detection (#731)
  • Fixing combineURLs to support empty relativeURL (#581)
  • Removing PROTECTION_PREFIX support (#561)

0.15.3 (Nov 27, 2016)

  • Fixing issue with custom instances and global defaults (#443)
  • Renaming axios.d.ts to index.d.ts (#519)
  • Adding get, head, and delete to defaults.headers (#509)
  • Fixing issue with btoa and IE (#507)
  • Adding support for proxy authentication (#483)
  • Improving HTTP adapter to use http protocol by default (#493)
  • Fixing proxy issues (#491)

0.15.2 (Oct 17, 2016)

  • Fixing issue with calling cancel after response has been received (#482)

0.15.1 (Oct 14, 2016)

  • Fixing issue with UMD (#485)

0.15.0 (Oct 10, 2016)

  • Adding cancellation support (#452)
  • Moving default adapter to global defaults (#437)
  • Fixing issue with file URI scheme (#440)
  • Fixing issue with params objects that have no prototype (#445)

0.14.0 (Aug 27, 2016)

  • BREAKING Updating TypeScript definitions (#419)
  • BREAKING Replacing agent option with httpAgent and httpsAgent (#387)
  • BREAKING Splitting progress event handlers into onUploadProgress and onDownloadProgress (#423)
  • Adding support for http_proxy and https_proxy environment variables (#366)
  • Fixing issue with auth config option and Authorization header (#397)
  • Don't set XSRF header if xsrfCookieName is null (#406)

0.13.1 (Jul 16, 2016)

  • Fixing issue with response data not being transformed on error (#378)

0.13.0 (Jul 13, 2016)

  • BREAKING Improved error handling (#345)
  • BREAKING Response transformer now invoked in dispatcher not adapter (10eb238)
  • BREAKING Request adapters now return a Promise (157efd5)
  • Fixing issue with withCredentials not being overwritten (#343)
  • Fixing regression with request transformer being called before request interceptor (#352)
  • Fixing custom instance defaults (#341)
  • Fixing instances created from axios.create to have same API as default axios (#217)

0.12.0 (May 31, 2016)

  • Adding support for URLSearchParams (#317)
  • Adding maxRedirects option (#307)

0.11.1 (May 17, 2016)

  • Fixing IE CORS support (#313)
  • Fixing detection of FormData (#325)
  • Adding Axios class to exports (#321)

0.11.0 (Apr 26, 2016)

  • Adding support for Stream with HTTP adapter (#296)
  • Adding support for custom HTTP status code error ranges (#308)
  • Fixing issue with ArrayBuffer (#299)

0.10.0 (Apr 20, 2016)

  • Fixing issue with some requests sending undefined instead of null (#250)
  • Fixing basic auth for HTTP adapter (#252)
  • Fixing request timeout for XHR adapter (#227)
  • Fixing IE8 support by using onreadystatechange instead of onload (#249)
  • Fixing IE9 cross domain requests (#251)
  • Adding maxContentLength option (#275)
  • Fixing XHR support for WebWorker environment (#279)
  • Adding request instance to response (#200)

0.9.1 (Jan 24, 2016)

  • Improving handling of request timeout in node (#124)
  • Fixing network errors not rejecting (#205)
  • Fixing issue with IE rejecting on HTTP 204 (#201)
  • Fixing host/port when following redirects (#198)

0.9.0 (Jan 18, 2016)

  • Adding support for custom adapters
  • Fixing Content-Type header being removed when data is false (#195)
  • Improving XDomainRequest implementation (#185)
  • Improving config merging and order of precedence (#183)
  • Fixing XDomainRequest support for only <= IE9 (#182)

0.8.1 (Dec 14, 2015)

  • Adding support for passing XSRF token for cross domain requests when using withCredentials (#168)
  • Fixing error with format of basic auth header (#178)
  • Fixing error with JSON payloads throwing InvalidStateError in some cases (#174)

0.8.0 (Dec 11, 2015)

  • Adding support for creating instances of axios (#123)
  • Fixing http adapter to use Buffer instead of String in case of responseType === 'arraybuffer' (#128)
  • Adding support for using custom parameter serializer with paramsSerializer option (#121)
  • Fixing issue in IE8 caused by forEach on arguments (#127)
  • Adding support for following redirects in node (#146)
  • Adding support for transparent decompression if content-encoding is set (#149)
  • Adding support for transparent XDomainRequest to handle cross domain requests in IE9 (#140)
  • Adding support for HTTP basic auth via Authorization header (#167)
  • Adding support for baseURL option (#160)

0.7.0 (Sep 29, 2015)

  • Fixing issue with minified bundle in IE8 (#87)
  • Adding support for passing agent in node (#102)
  • Adding support for returning result from axios.spread for chaining (#106)
  • Fixing typescript definition (#105)
  • Fixing default timeout config for node (#112)
  • Adding support for use in web workers, and react-native (#70), (#98)
  • Adding support for fetch like API axios(url[, config]) (#116)

0.6.0 (Sep 21, 2015)

  • Removing deprecated success/error aliases
  • Fixing issue with array params not being properly encoded (#49)
  • Fixing issue with User-Agent getting overridden (#69)
  • Adding support for timeout config (#56)
  • Removing es6-promise dependency
  • Fixing issue preventing length to be used as a parameter (#91)
  • Fixing issue with IE8 (#85)
  • Converting build to UMD

0.5.4 (Apr 08, 2015)

  • Fixing issue with FormData not being sent (#53)

0.5.3 (Apr 07, 2015)

  • Using JSON.parse unconditionally when transforming response string (#55)

0.5.2 (Mar 13, 2015)

  • Adding support for statusText in response (#46)

0.5.1 (Mar 10, 2015)

  • Fixing issue using strict mode (#45)
  • Fixing issue with standalone build (#47)

0.5.0 (Jan 23, 2015)

  • Adding support for intercepetors (#14)
  • Updating es6-promise dependency

0.4.2 (Dec 10, 2014)

  • Fixing issue with Content-Type when using FormData (#22)
  • Adding support for TypeScript (#25)
  • Fixing issue with standalone build (#29)
  • Fixing issue with verbs needing to be capitalized in some browsers (#30)

0.4.1 (Oct 15, 2014)

  • Adding error handling to request for node.js (#18)

0.4.0 (Oct 03, 2014)

  • Adding support for ArrayBuffer and ArrayBufferView (#10)
  • Adding support for utf-8 for node.js (#13)
  • Adding support for SSL for node.js (#12)
  • Fixing incorrect Content-Type header (#9)
  • Adding standalone build without bundled es6-promise (#11)
  • Deprecating success/error in favor of then/catch

0.3.1 (Sep 16, 2014)

  • Fixing missing post body when using node.js (#3)

0.3.0 (Sep 16, 2014)

  • Fixing success and error to properly receive response data as individual arguments (#8)
  • Updating then and catch to receive response data as a single object (#6)
  • Fixing issue with all not working (#7)

0.2.2 (Sep 14, 2014)

  • Fixing bundling with browserify (#4)

0.2.1 (Sep 12, 2014)

  • Fixing build problem causing ridiculous file sizes

0.2.0 (Sep 12, 2014)

  • Adding support for all and spread
  • Adding support for node.js (#1)

0.1.0 (Aug 29, 2014)

  • Initial release