Request

The Request interface of the Fetch API represents a resource request.

You can create a new Request object using the Request() constructor, but you are more likely to encounter a Request object being returned as the result of another API operation, such as a service worker FetchEvent.request.

Constructor

Request()

Creates a new Request object.

Properties

Request.body Read only

A ReadableStream of the body contents.

Request.bodyUsed Read only

Stores true or false to indicate whether or not the body has been used in a request yet.

Request.cache Read only

Contains the cache mode of the request (e.g., default, reload, no-cache).

Request.credentials Read only

Contains the credentials of the request (e.g., omit, same-origin, include). The default is same-origin.

Request.destination Read only

Returns a string describing the request's destination. This is a string indicating the type of content being requested.

Request.headers Read only

Contains the associated Headers object of the request.

Request.integrity Read only

Contains the subresource integrity value of the request (e.g., sha256-BpfBw7ivV8q2jLiT13fxDYAe2tJllusRSZ273h2nFSE=).

Request.method Read only

Contains the request's method (GET, POST, etc.)

Request.mode Read only

Contains the mode of the request (e.g., cors, no-cors, same-origin, navigate.)

Request.redirect Read only

Contains the mode for how redirects are handled. It may be one of follow, error, or manual.

Request.referrer Read only

Contains the referrer of the request (e.g., client).

Request.referrerPolicy Read only

Contains the referrer policy of the request (e.g., no-referrer).

Request.url Read only

Contains the URL of the request.

Methods

Request.arrayBuffer()

Returns a promise that resolves with an ArrayBuffer representation of the request body.

Request.blob()

Returns a promise that resolves with a Blob representation of the request body.

Request.clone()

Creates a copy of the current Request object.

Request.formData()

Returns a promise that resolves with a FormData representation of the request body.

Request.json()

Returns a promise that resolves with the result of parsing the request body as JSON.

Request.text()

Returns a promise that resolves with a text representation of the request body.

Note: The request body functions can be run only once; subsequent calls will resolve with empty strings/ArrayBuffers.

Examples

In the following snippet, we create a new request using the Request() constructor (for an image file in the same directory as the script), then return some property values of the request:

const request = new Request('https://www.mozilla.org/favicon.ico');

const url = request.url;
const method = request.method;
const credentials = request.credentials;

You could then fetch this request by passing the Request object in as a parameter to a fetch() call, for example:

fetch(request)
  .then(response => response.blob())
  .then(blob => {
    image.src = URL.createObjectURL(blob);
  });

In the following snippet, we create a new request using the Request() constructor with some initial data and body content for an api request which need a body payload:

const request = new Request('https://example.com', {method: 'POST', body: '{"foo": "bar"}'});

const url = request.url;
const method = request.method;
const credentials = request.credentials;
const bodyUsed = request.bodyUsed;

Note: The body type can only be a Blob, BufferSource, FormData, URLSearchParams, USVString or ReadableStream type, so for adding a JSON object to the payload you need to stringify that object.

You could then fetch this api request by passing the Request object in as a parameter to a fetch() call, for example and get the response:

fetch(request)
  .then(response => {
    if (response.status === 200) {
      return response.json();
    } else {
      throw new Error('Something went wrong on api server!');
    }
  })
  .then(response => {
    console.debug(response);
    // ...
  }).catch(error => {
    console.error(error);
  });

Specifications

Browser compatibility

Desktop Mobile
Chrome Edge Firefox Internet Explorer Opera Safari WebView Android Chrome Android Firefox for Android Opera Android Safari on IOS Samsung Internet
Request
42
40-42
Only available in service workers.
14
39
No
29
27-29
Only available in service workers.
10.1
42
40-42
Only available in service workers.
42
40-42
Only available in service workers.
39
29
27-29
Only available in service workers.
10.3
4.0
Request
40
From Chrome 47, default values for the init argument's properties changed. mode defaults to same-origin (from no-cors). credentials defaults to include (from same-origin). redirect defaults to follow (from manual).
14
39
No
27
10.1
40
From WebView 47, default values for the init argument's properties changed. mode defaults to same-origin (from no-cors). credentials defaults to include (from same-origin). redirect defaults to follow (from manual).
40
From Chrome 47, default values for the init argument's properties changed. mode defaults to same-origin (from no-cors). credentials defaults to include (from same-origin). redirect defaults to follow (from manual).
39
27
10.3
4.0
5.0
Some default values for the init parameter changed in Samsung Internet 5.0. See the Properties section for details.
cache
64
14
48
No
51
10.1
64
64
48
47
10.3
9.0
clone
40
14
39
No
27
10.1
40
40
39
27
10.3
4.0
credentials
40
14
39
No
27
10.1
40
40
39
27
10.3
4.0
destination
65
14
61
No
52
10.1
65
65
61
47
10.3
9.0
headers
40
14
39
No
27
10.1
40
40
39
27
10.3
4.0
integrity
46
14
51
No
33
10.1
46
46
51
33
10.3
5.0
isHistoryNavigation
69
79
No
No
56
No
69
69
No
48
No
10.0
keepalive
66
15
No
No
43
13
66
66
No
43
13
9.0
method
40
14
39
No
27
10.1
40
40
39
27
10.3
4.0
mode
40
14
39
No
27
10.1
40
40
39
27
10.3
4.0
redirect
46
14
43
No
33
10.1
46
46
43
33
10.3
5.0
referrer
40
14
39
No
27
10.1
40
40
39
27
10.3
4.0
referrerPolicy
52
14
47
No
39
10.1
52
52
47
41
10.3
7.2
signal
66
16
57
No
53
12.1
66
66
57
47
12.2
9.0
url
40
Fragment support added in Chrome 59.
14
39
No
27
Fragment support added in Opera 46.
10.1
40
Fragment support added in Chrome 59.
40
Fragment support added in Chrome 59.
39
27
Fragment support added in Opera 46.
10.3
4.0
Fragment support added in Samsung Internet 7.0.
arrayBuffer
42
14
39
No
29
10.1
42
42
39
29
10.3
4.0
blob
42
14
39
No
29
10.1
42
42
39
29
10.3
4.0
body
No
No
No
No
No
11.1
No
No
No
No
11.3
No
bodyUsed
42
14
39
No
29
10.1
42
42
39
29
10.3
4.0
formData
60
79
39
No
47
14.1
11.1
The method exists but always rejects with NotSupportedError. See bug 215671.
60
60
39
44
14.5
11.3
The method exists but always rejects with NotSupportedError. See bug 215671.
8.0
json
42
14
39
No
29
10.1
42
42
39
29
10.3
4.0
text
42
14
39
No
29
10.1
42
42
39
29
10.3
4.0

See also

© 2005–2021 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/Request