GlobalFetch.fetch()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since March 2017.
La méthode globale fetch()
démarre le chargement d'une ressource sur le réseau et retourne une promesse qui est résolue dès que la réponse est disponible. La promesse résoud l'objet Response
représentant la réponse de votre requête. Cette promesse n'échoue pas en cas d'erreur HTTP, elle n'échoue que sur les problèmes de réseau. Vous devez utiliser un gestionnaire then
pour identifier les erreurs HTTP.
WindowOrWorkerGlobalScope
est aussi bien implémenté par Window
que par WorkerGlobalScope
, ce qui signifie que la méthode fetch()
est disponible dans la plupart des cas où vous pourriez en avoir besoin.
Une promesse fetch()
n'est rejetée que quand un problème de réseau est rencontré, même si en réalité cela signifie généralement qu'il y a un problème de permissions ou quelque chose de similaire. La promesse ne sera pas rejetée en cas d'erreur HTTP (404
, etc.) Pour cela, un gestionnaire then()
doit vérifier que la propriété Response.ok
ait bien pour valeur true
et/ou la valeur de la propriété Response.status
.
La méthode fetch()
est contrôlée par la directive connect-src
de l'entête Content Security Policy plutôt que par la directive de la ressource qui est récupérée.
Note : Les paramètres de la méthode fetch()
sont identiques à ceux du contructeur d'une Request()
.
Syntaxe
const fetchResponsePromise = Promise<Response> fetch(entrée[, init]);
Paramètres
entrée
-
Définit la ressource que vous voulez obtenir. Cela peut être :
init
Facultatif-
Un objet qui contient les paramètres de votre requête. Les options possibles sont :
method
-
La méthode de la requête, par exemple
GET
ouPOST
. Comme spécifié, dans la spécification WHATWG, toute méthode définie dans la RFC 9110 sera automatiquement mise en majuscule. Si vous souhaitez utiliser une méthode exotique (commePATCH
), vous devrez la mettre en majuscule vous-même. Notez que l'en-têteOrigin
n'était pas défini dans les requêtesfetch()
avec les méthodesHEAD
ouGET
à cause d'un bug pour Firefox avant Firefox 65 (voir bug 1508661). headers
-
Les entêtes à ajouter à votre requête, contenues dans un objet
Headers
ou dans un objet avec desByteString
pour valeurs. body
-
Le corps de votre requête. Cela peut être un
Blob
, unBufferSource
, unFormData
, unURLSearchParams
, ou unUSVString
. Notez cependant qu'une requête avecGET
ouHEAD
pour méthode ne peut pas avoir de corps. mode
-
Le mode à utiliser pour cette requête, par exemple
cors
,no-cors
, ousame-origin.
credentials
-
Les identifiants à utiliser pour cette requête :
omit
,same-origin
, ouinclude
. Pour envoyer automatiquement les cookies pour le domaine actuel, cette option doit être définie. À partir de Chrome 50, cette propriété peut aussi prendre un objetFederatedCredential
ou une instance dePasswordCredential
. cache
-
Le comportement du cache pour cette requête :
default
,no-store
,reload
,no-cache
,force-cache
, ouonly-if-cached
. redirect
-
Le mode de redirection à adopter pour cette requête :
follow
(suivre les redirections automatiquement),error
(abandonner avec une erreur si une redirection a lieu), oumanual
(gérer les redirections manuellement). Dans Chrome, la valeur par défaut étaitfollow
avant Chrome 47, mais à partir de cette version, c'estmanual
. referrer
-
Un USVString qui vaut
no-referrer
,client
, ou qui contient une URL. La valeur par défaut estclient
. referrerPolicy
-
Spécifie la valeur de l'entête HTTP referer. Cela peut être
no-referrer
,no-referrer-when-downgrade
,origin
,origin-when-cross-origin
ouunsafe-url
. integrity
-
Contient la valeur de l'intégrité de la sous-ressource de la requête (par exemple,
sha256-BpfBw7ivV8q2jLiT13fxDYAe2tJllusRSZ273h2nFSE=
). keepalive
-
Peut être utilisée pour autoriser la requête à se poursuivre après la fermeture de la page. Une requête avec ce paramètre est équivalente à l'API
Navigator.sendBeacon()
. signal
-
Une instance de
AbortSignal
vous permettant de communiquer avec une requête et de l'interrompre si vous le souhaitez via unAbortController
.
Valeur retournée
Exceptions
AbortError
-
La requête a été interrompue à cause d'un appel à la méthode
abort()
deAbortController
. TypeError
-
L'URL spécifié inclut des identifiants. Ces informations devraient plutôt être fournises via l'en-tête HTTP
Authorization
.
Exemple
Dans notre exemple de requête avec fetch (voir cet exemple en direct) nous créons une nouvelle Request
avec le constructeur correspondant, puis on l'envoie en appellant fetch()
. Comme nous récupérons une image, nous utilisons la méthode Body.blob()
sur la réponse pour lui donner le bon type MIME pour qu'elle soit gérée correctement, puis l'on crée l'URL correspondant à cet objet et on l'affiche dans un élément <img>
.
const monImage = document.querySelector("img");
let maRequete = new Request("fleurs.jpg");
fetch(maRequete)
.then(function (reponse) {
if (!reponse.ok) {
throw new Error(`erreur HTTP! statut: ${reponse.status}`);
}
return reponse.blob();
})
.then(function (reponse) {
let URLobjet = URL.createObjectURL(reponse);
monImage.src = URLobjet;
});
Dans notre exemple fetch avec initialisation et requête (voir cet exemple en direct) nous faisons la même chose à la différence que nous passons aussi un objet d'initalisation à la méthode fetch
:
const monImage = document.querySelector('img');
let mesEntetes = new Headers();
mesEntetes.append('Content-Type', 'image/jpeg');
const monInit = { method: 'GET',
headers: mesEntetes,
mode: 'cors',
cache: 'default' };
let maRequete = new Request('fleurs.jpg');
fetch(maRequete, monInit).then(function(reponse) {
...
});
Notez que vous pouvez aussi passer l'objet d'initialisation au constructeur de la requête pour obtenir le même effet, par exemple :
let maRequete = new Request("fleurs.jpg", monInit);
Vous pouvez aussi utiliser un objet litéral comme en-têtes dans votre objet d'initalisation.
const monInit = {
method: "GET",
headers: {
"Content-Type": "image/jpeg",
},
mode: "cors",
cache: "default",
};
let maRequete = new Request("fleurs.jpg", monInit);
Spécifications
Specification |
---|
Fetch Standard # fetch-method |
Compatibilité des navigateurs
BCD tables only load in the browser