--- title: GlobalFetch.fetch() slug: Web/API/fetch tags: - API - API Fetch - Experimental - Fetch - GlobalFetch - Méthode - Reference - WindowOrWorkerGlobalScope - requête translation_of: Web/API/WindowOrWorkerGlobalScope/fetch original_slug: Web/API/WindowOrWorkerGlobalScope/fetch ---
{{APIRef("Fetch")}}
La méthode fetch()
du mixin {{domxref("WindowOrWorkerGlobalScope")}} 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 {{domxref("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 {{domxref("Window")}} que par {{domxref("WorkerGlobalScope")}}, ce qui signifie que la méthode fetch()
est disponible dans la plupart des cas où vous pourriez en avoir besoin.
Une promesse {{domxref("GlobalFetch.fetch","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é {{domxref("Response.ok")}} ait bien pour valeur true
et/ou la valeur de la propriété {{domxref("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 {{domxref("Request.Request","Request()")}}.
const fetchResponsePromise = Promise<Response> fetch(entrée[, init]);
entrée
blob:
et data:
.init
{{optional_inline}}Un objet qui contient les paramètres de votre requête. Les options possibles sont :
method
GET
ou POST
.headers
body
GET
ou HEAD
pour méthode ne peut pas avoir de corps.mode
cors
, no-cors
, ou same-origin.
credentials
omit
, same-origin
, ou include
. 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 objet {{domxref("FederatedCredential")}} ou une instance de {{domxref("PasswordCredential")}}.cache
default
, no-store
, reload
, no-cache
, force-cache
, ou only-if-cached
.redirect
follow
(suivre les redirections automatiquement), error
(abandonner avec une erreur si une redirection a lieu), ou manual
(gérer les redirections manuellement). Dans Chrome, la valeur par défaut était follow
avant Chrome 47, mais à partir de cette version, c'est manual
.referrer
no-referrer
, client
, ou qui contient une URL. La valeur par défaut est client
.referrerPolicy
no-referrer
, no-referrer-when-downgrade
, origin
, origin-when-cross-origin
ou unsafe-url
.integrity
sha256-BpfBw7ivV8q2jLiT13fxDYAe2tJllusRSZ273h2nFSE=
).keepalive
signal
Une {{domxref("Promise")}} qui se résoud avec un object {{domxref("Response")}}.
AbortError
TypeError
Dans notre exemple de requête avec fetch (voir cet exemple en direct) nous créons une nouvelle {{domxref("Request")}} avec le constructeur correspondant, puis on l'envoie en appellant fetch()
. Comme nous récupérons une image, nous utilisons la méthode {{domxref("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 {{htmlelement("img")}}.
const monImage = document.querySelector('img'); let maRequete = new Request('fleurs.jpg'); fetch(maRequete) .then(function(reponse) { if (!response.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);
Specification | Statut | Commentaire |
---|---|---|
{{SpecName('Fetch','#fetch-method','fetch()')}} | {{Spec2('Fetch')}} | Définie dans un WindowOrWorkerGlobalScope dans la nouvelle spécification. |
{{SpecName('Fetch','#dom-global-fetch','fetch()')}} | {{Spec2('Fetch')}} | Définition initiale |
{{SpecName('Credential Management')}} | {{Spec2('Credential Management')}} | Ajoute la possiblité d'utiliser une instance de {{domxref("FederatedCredential")}} ou de {{domxref("PasswordCredential")}} comme valeur de init.credentials . |
{{Compat("api.WindowOrWorkerGlobalScope.fetch")}}