The Request interface of the Fetch API represents a resource request.
You can create a new Request object using the Request.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.Request()- Creates a new
Requestobject.
Properties
Request.cacheRead only- Contains the cache mode of the request (e.g.,
default,reload,no-cache). Request.contextRead only- Contains the context of the request (e.g.,
audio,image,iframe, etc.) Request.credentialsRead only- Contains the credentials of the request (e.g.,
"omit","same-origin","include"). The default is"same-origin". Request.destinationRead only- Returns a string from the
RequestDestinationenum describing the request's destination. This is a string indicating the type of content being requested. Request.headersRead only- Contains the associated
Headersobject of the request. Request.integrityRead only- Contains the subresource integrity value of the request (e.g.,
sha256-BpfBw7ivV8q2jLiT13fxDYAe2tJllusRSZ273h2nFSE=). Request.methodRead only- Contains the request's method (
GET,POST, etc.) Request.modeRead only- Contains the mode of the request (e.g.,
cors,no-cors,same-origin,navigate.) Request.redirectRead only- Contains the mode for how redirects are handled. It may be one of
follow,error, ormanual. Request.referrerRead only- Contains the referrer of the request (e.g.,
client). Request.referrerPolicyRead only- Contains the referrer policy of the request (e.g.,
no-referrer). Request.urlRead only- Contains the URL of the request.
Request implements Body, so it also inherits the following properties:
bodyRead only- A simple getter used to expose a
ReadableStreamof the body contents. bodyUsedRead only- Stores a
Booleanthat declares whether the body has been used in a response yet.
Methods
Request.clone()- Creates a copy of the current
Requestobject.
Request implements Body, so it also has the following methods available to it:
Body.arrayBuffer()- Returns a promise that resolves with an
ArrayBufferrepresentation of the request body. Body.blob()- Returns a promise that resolves with a
Blobrepresentation of the request body. Body.formData()- Returns a promise that resolves with a
FormDatarepresentation of the request body. Body.json()- Returns a promise that resolves with a
JSONrepresentation of the request body. Body.text()- Returns a promise that resolves with an
USVString(text) representation of the request body.
Note: The 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 myRequest = new Request('http://localhost/flowers.jpg');
const myURL = myRequest.url; // http://localhost/flowers.jpg
const myMethod = myRequest.method; // GET
const myCred = myRequest.credentials; // same-origin
You could then fetch this request by passing the Request object in as a parameter to a WindowOrWorkerGlobalScope.fetch() call, for example:
fetch(myRequest)
.then(response => response.blob())
.then(blob => {
myImage.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 myRequest = new Request('http://localhost/api', {method: 'POST', body: '{"foo":"bar"}'});
const myURL = myRequest.url; // http://localhost/api
const myMethod = myRequest.method; // POST
const myCred = myRequest.credentials; // same-origin
const bodyUsed = myRequest.bodyUsed; // true
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 WindowOrWorkerGlobalScope.fetch() call, for example and get the response:
fetch(myRequest)
.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
| Specification | Status | Comment |
|---|---|---|
| Fetch The definition of 'Request' in that specification. |
Living Standard | Initial definition |
Browser compatibility
| Desktop | Mobile | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Basic support | Chrome Full support 42 | Edge Full support Yes | Firefox Full support 39 | IE No support No | Opera Full support 28 | Safari No support No | WebView Android Full support 42 | Chrome Android Full support 42 | Edge Mobile Full support Yes | Firefox Android Full support Yes | Opera Android Full support 28 | Safari iOS No support No | Samsung Internet Android Full support 4.0 |
Request() constructor | Chrome
Full support
42
| Edge Full support 15 | Firefox
Full support
39
| IE No support No | Opera
Full support
29
| Safari Full support 10.1 | WebView Android
Full support
42
| Chrome Android
Full support
42
| Edge Mobile Full support Yes | Firefox Android Full support Yes | Opera Android No support No | Safari iOS Full support 10.3 | Samsung Internet Android
Full support
4.0
|
cache | Chrome
No support
No
| Edge Full support Yes | Firefox Full support 48 | IE No support No | Opera No support No | Safari Full support 11 | WebView Android No support No | Chrome Android No support No | Edge Mobile Full support Yes | Firefox Android No support No | Opera Android No support No | Safari iOS No support No | Samsung Internet Android No support No |
clone | Chrome
Full support
42
| Edge Full support Yes | Firefox
Full support
39
| IE No support No | Opera
Full support
29
| Safari No support No | WebView Android No support No | Chrome Android No support No | Edge Mobile Full support Yes | Firefox Android No support No | Opera Android No support No | Safari iOS No support No | Samsung Internet Android No support No |
context | Chrome No support 42 — 46 | Edge ? | Firefox
No support
39 — 42
| IE No support No | Opera No support 28 — 29 | Safari No support No | WebView Android No support 42 — 46 | Chrome Android No support 42 — 46 | Edge Mobile ? | Firefox Android No support No | Opera Android No support No | Safari iOS No support No | Samsung Internet Android Full support 4.0 |
credentials | Chrome
Full support
42
| Edge Full support Yes | Firefox
Full support
39
| IE No support No | Opera
Full support
29
| Safari No support No | WebView Android No support No | Chrome Android No support 42 — 46 | Edge Mobile Full support Yes | Firefox Android No support No | Opera Android No support No | Safari iOS No support No | Samsung Internet Android Full support 4.0 |
destination | Chrome Full support 65 | Edge Full support 14 | Firefox Full support 61 | IE No support No | Opera Full support 52 | Safari No support No | WebView Android ? | Chrome Android Full support 65 | Edge Mobile ? | Firefox Android Full support 61 | Opera Android Full support 52 | Safari iOS No support No | Samsung Internet Android ? |
headers | Chrome
Full support
42
| Edge Full support Yes | Firefox
Full support
39
| IE No support No | Opera
Full support
29
| Safari No support No | WebView Android No support No | Chrome Android No support 42 — 46 | Edge Mobile Full support Yes | Firefox Android No support No | Opera Android No support No | Safari iOS No support No | Samsung Internet Android Full support 4.0 |
integrity | Chrome Full support 46 | Edge Full support Yes | Firefox Full support Yes | IE No support No | Opera Full support Yes | Safari No support No | WebView Android No support No | Chrome Android Full support 46 | Edge Mobile Full support Yes | Firefox Android No support No | Opera Android Full support Yes | Safari iOS No support No | Samsung Internet Android Full support 5.0 |
keepalive | Chrome Full support 66 | Edge Full support 15 | Firefox ? | IE ? | Opera Full support 43 | Safari ? | WebView Android No support No | Chrome Android Full support 66 | Edge Mobile ? | Firefox Android ? | Opera Android Full support 43 | Safari iOS ? | Samsung Internet Android No support No |
method | Chrome
Full support
42
| Edge Full support Yes | Firefox
Full support
39
| IE No support No | Opera
Full support
29
| Safari No support No | WebView Android No support No | Chrome Android No support 42 — 46 | Edge Mobile Full support Yes | Firefox Android No support No | Opera Android No support No | Safari iOS No support No | Samsung Internet Android Full support 4.0 |
mode | Chrome Full support 42 | Edge Full support Yes | Firefox Full support 39 | IE No support No | Opera Full support 29 | Safari No support No | WebView Android Full support 49 | Chrome Android Full support 49 | Edge Mobile Full support Yes | Firefox Android No support No | Opera Android No support No | Safari iOS No support No | Samsung Internet Android Full support 5.0 |
redirect | Chrome Full support 46 | Edge Full support Yes | Firefox Full support Yes | IE No support No | Opera Full support Yes | Safari No support No | WebView Android No support No | Chrome Android Full support 46 | Edge Mobile Full support Yes | Firefox Android Full support Yes | Opera Android Full support Yes | Safari iOS No support No | Samsung Internet Android Full support 5.0 |
referrer | Chrome
Full support
42
| Edge Full support Yes | Firefox Full support 47 | IE No support No | Opera
Full support
29
| Safari No support No | WebView Android No support No | Chrome Android No support No | Edge Mobile Full support Yes | Firefox Android No support No | Opera Android No support No | Safari iOS No support No | Samsung Internet Android No support No |
referrerPolicy | Chrome Full support 52 | Edge No support No | Firefox Full support 52 | IE No support No | Opera Full support 39 | Safari Full support 11.1 | WebView Android Full support 52 | Chrome Android Full support 52 | Edge Mobile No support No | Firefox Android Full support 52 | Opera Android Full support 39 | Safari iOS No support No | Samsung Internet Android Full support 7.2 |
signal | Chrome ? | Edge Full support 16 | Firefox ? | IE ? | Opera ? | Safari ? | WebView Android ? | Chrome Android ? | Edge Mobile ? | Firefox Android ? | Opera Android ? | Safari iOS ? | Samsung Internet Android ? |
url | Chrome
Full support
42
| Edge Full support Yes | Firefox
Full support
39
| IE No support No | Opera
Full support
29
| Safari No support No | WebView Android
Full support
42
| Chrome Android
Full support
42
| Edge Mobile Full support Yes | Firefox Android No support No | Opera Android
Full support
29
| Safari iOS No support No | Samsung Internet Android Full support 4.0 |
Legend
- Full support
- Full support
- No support
- No support
- Compatibility unknown
- Compatibility unknown
- Experimental. Expect behavior to change in the future.
- Experimental. Expect behavior to change in the future.
- Non-standard. Expect poor cross-browser support.
- Non-standard. Expect poor cross-browser support.
- Deprecated. Not for use in new websites.
- Deprecated. Not for use in new websites.
- See implementation notes.
- See implementation notes.
- User must explicitly enable this feature.
- User must explicitly enable this feature.