W3cubDocs

/Web APIs

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.

Instance 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

A string describing 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.signal Read only

Returns the AbortSignal associated with the request

Request.url Read only

Contains the URL of the request.

Instance 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 reject with TypeError showing that the body stream has already used.

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:

js

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:

js

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:

js

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 can only be a Blob, an ArrayBuffer, a TypedArray, a DataView, a FormData, a URLSearchParams, a ReadableStream, or a String object, as well as a string literal, 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:

js

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
40From 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
40From 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).
40From 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.0From Samsung Internet 5.0, 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).
Request 42
40–42Only available in service workers.
14 39 No 29
27–29Only available in service workers.
10.1 42
40–42Only available in service workers.
42
40–42Only available in service workers.
39 29
27–29Only available in service workers.
10.3 4.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 105 105 No No 91 11.1 105 105 No 72 11.3 20.0
bodyUsed 42 14 39 No 29 10.1 42 42 39 29 10.3 4.0
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
formData 60 79 39 No 47 14.1
11.1The method exists but always rejects with NotSupportedError. See bug 215671.
60 60 39 44 14.5
11.3The method exists but always rejects with NotSupportedError. See bug 215671.
8.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
json 42 14 39 No 29 10.1 42 42 39 29 10.3 4.0
keepalive 66 15 No No 53 13 66 66 No 47 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
text 42 14 39 No 29 10.1 42 42 39 29 10.3 4.0
url
40Fragment support added in Chrome 59.
14 39 No
27Fragment support added in Opera 46.
10.1
40Fragment support added in Chrome 59.
40Fragment support added in Chrome 59.
39
27Fragment support added in Opera 46.
10.3
4.0Fragment support added in Samsung Internet 7.0.

See also

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