Tous les produits
Search
Centre de documentation

Edge Security Acceleration:Fetch API

Dernière mise à jour :Aug 12, 2026

Récupérez des données depuis les POP edge via HTTP ou HTTPS. La Fetch API fonctionne comme celle des navigateurs et prend en charge le chargement dynamique de contenu, l'interaction avec le backend ainsi que les tests A/B.

Définition de la méthode

Fetch est entièrement asynchrone et ne bloque pas l'exécution du script, sauf si vous utilisez await. Le système prend en charge jusqu'à quatre sous-requêtes simultanées et gère les connexions persistantes en interne.

Fetch prend en charge les requêtes HTTP et HTTPS. Chaque redirect compte comme une sous-requête, avec un maximum de 12 opérations redirect par requête.

  • Définition de la méthode

    fetch(arg, init). Cette méthode suit la spécification MDN WorkerOrGlobalScope.fetch().

  • Limites de la méthode

    • La Fetch API accepte uniquement les noms de domaine, et non les adresses IP. Ports par défaut : 80 (HTTP) et 443 (HTTPS).

    • Les propriétés credentials, referrer, referrerPolicy, cache et integrity du paramètre init n'ont aucun effet.

    • La valeur par défaut de redirect est follow, ce qui suit les réponses 3xx de l'origine. Définissez redirect sur manual pour désactiver le suivi des redirections.

    Remarque
    • Les modes Fetch spécifiques aux navigateurs ne s'appliquent pas. Sur CDN, DCDN ou ESA, CROS fetch permet de récupérer des données depuis n'importe quelle origine.

    • Pour envoyer au moins quatre sous-requêtes, soumettez un ticket afin de demander une augmentation du quota.

    • La longueur totale d'une URL de requête ne peut pas dépasser 4 Ko.

    • Les ressources compressées en gzip sont décompressées par défaut lors de leur récupération. Ajoutez le paramètre manual pour désactiver la décompression. Consultez la section Décompression pour plus de détails.

  • Définir un délai d'expiration

    • Fonction de temporisation

      /**
       * Request timeout control implementation
       *
       * @param {Number} timeout Timeout period, in ms
       * @param {Object} config Timeout configuration
       *   - @param {Object|Funtion} handler Value to return on timeout
       * @returns
       */
      const RequestTimeout = (timeout, config) => {
        return new Promise((resolve) => {
          const { handler = null } = config;
          let timer = setTimeout(() => {
            clearTimeout(timer);
            timer = null;
      
            const defaultRes = (typeof handler === 'function' ? handler() : handler) || {};
            resolve(defaultRes);
          }, timeout);
        });
      };
    • Exemple d'appel

      const KV_TIMEOUT = 1000;
      let edgekv = new EdgeKV({
        namespace: KV_NS,
      });
      
      let kvRequest = edgekv.get(key, getType);
      let timeoutPromise = RequestTimeout(KV_TIMEOUT, {
        handler: {
          res: {},
          errorMessage: `kv request timeout (${KV_TIMEOUT}ms)`,
        }
      });
      
      let resp = await Promise.race([
        kvRequest,
        timeoutPromise,
      ]);
      
      if (resp === undefined) {
        return "kv not found, key = " + key;
      } else {
        return resp;
      }

Redirection

Fetch suit les redirections 3xx (301, 302, 303, 307, 308). Spécifiez l'un des trois comportements de redirection suivants :

  • {redirect: "manual"} : Ne suit pas les redirections 3xx. Vous devez gérer les redirections manuellement.

  • {redirect: "error"} : Une erreur est levée pour les réponses 3xx.

  • {redirect: "follow"} : (Par défaut) Suit les redirections 3xx. Un maximum de 20 redirections peuvent être suivies.

Comportement de redirection selon le code d'état :

Code d'état

Détails de la redirection

301, 302, 303, 308

La méthode de requête devient GET et le corps est ignoré.

307

Seules les méthodes GET sont suivies. Une erreur est signalée pour les autres méthodes.

Remarque

Les redirections utilisent l'en-tête Location, qui est obligatoire. L'absence de cet en-tête provoque une erreur.

  • L'en-tête Location peut contenir une liste d'URL séparées par des virgules (,). Seule la première URL est utilisée ; les autres sont ignorées.

  • L'en-tête Location peut contenir une URL absolue ou relative.

Décompression

La Fetch API permet de configurer un mode de décompression, par exemple fetch("https://www.example.com",{decompress: "manual"}). Le paramètre decompress accepte les valeurs suivantes :

  • manual : ne décompresse pas les données. Si le serveur renvoie des données compressées lors d'une requête fetch, les données reçues par EdgeRoutine (ER) restent compressées.

  • decompress : décompresse automatiquement les données. Il s'agit de la valeur par défaut. La Fetch API prend en charge la compression Gzip. ER détecte ou décompresse automatiquement les données selon l'en-tête Content-Encoding. Après la décompression, ER modifie la valeur de Content-Encoding. Si le paramètre Gzip est supprimé, configurez les paramètres suivants pour éviter les exceptions lors de la transmission des données :

    • content-encoding: gzip : ER reconnaît la valeur de Content-Encoding et décompresse les données.

    • content-encoding: gzip, identity : ER reconnaît la valeur de Content-Encoding et décompresse les données.

    Remarque

    Les algorithmes autres que Gzip provoquent des exceptions.

  • fallbackIdentity : L'effet de cette valeur est similaire à celui de decompress. Si ER ne reconnaît pas cette valeur, il ne décompresse pas les données.

Important

Une fois que la Fetch API a décompressé automatiquement les données, vous ne pouvez pas transmettre l'en-tête Content-Length tel quel si la réponse contient cet en-tête. En effet, Content-Length indique la taille des données avant décompression.

content-length

Lorsque content-length est défini, Fetch envoie le corps en utilisant l'encodage content-length. Sans content-length, Fetch envoie toutes les données du corps en utilisant l'encodage par morceaux (chunked).

  • Paramètres content-length

    • Si content-length est un nombre non négatif : Fetch lit et envoie le nombre d'octets spécifié depuis le flux du corps. Les données sont envoyées avec l'encodage content-length. Si content-length vaut 0, aucune donnée n'est envoyée.

    • Si content-length est une valeur invalide : Fetch envoie toutes les données du corps en utilisant l'encodage par morceaux.

  • Exemple

    Fetch décompresse le contenu automatiquement. L'en-tête de réponse content-length reflète toujours la taille avant décompression. Si vous modifiez le corps avant de le transférer, vérifiez que content-length correspond à la taille réelle du corps. Une incompatibilité de content-length entraîne une diffusion incorrecte du contenu.

    Dans cet exemple, un client envoie une requête POST avec un en-tête content-length. Si vous créez une nouvelle requête Fetch en réutilisant les en-têtes du client, content-length risque de ne pas correspondre à la nouvelle taille du corps. Vérifiez toujours la taille du corps lors du transfert des en-têtes.

    export default {
      fetch(request) {
        return handleRequest(request)
      }
    }
    async function handleRequest(request) {
      return fetch("http://www.example.com", {
        headers: request.headers,
        method: request.method,
        body: "SomeData"
      });
    }

Headers

  • Définition

    Pour plus d'informations sur l'objet Headers, consultez Headers.

  • Limites

    Un en-tête consomme des ressources mémoire. La taille maximale d'un objet Headers est de 8 Ko. Le dépassement de cette limite lève une exception JavaScript.

  • Liste de blocage

    La Fetch API utilise une liste de blocage d'en-têtes. Toute tentative de lecture ou d'écriture d'un en-tête figurant dans cette liste lève une exception. Le tableau suivant décrit les en-têtes inclus dans la liste de blocage.

    • expect

    • te

    • trailer

    • upgrade

    • proxy-connection

    • connection

    • keep-alive

    • dnt

    • host

    • En-têtes réservés

Request

  • Définition

    Suit la spécification MDN Request.

  • Limites

    Les propriétés Request suivantes ne sont pas prises en charge dans CDN, DCDN ou ESA.

    • context

    • credentials

    • destination

    • integrity

    • mode

    • referrer

    • referrerPolicy

    • cache

  • Cas d'utilisation courants

    • Récupérer la méthode de requête : request.method.

    • Récupérer l'URL de requête : request.url.

    • Récupérer les en-têtes de requête : request.headers.

    • Récupérer la charge utile de requête : request.body. Le corps est un objet ReadableStream.

    • Récupérer du JSON : await request.json().

    • Récupérer des données de formulaire : await request.formData().

    • Récupérer une chaîne UTF-8 : await request.text().

    Extension non standard, request.ignore vide le flux du corps au niveau du socket sans le charger dans la mémoire de la machine virtuelle JavaScript, évitant ainsi les délais liés au ramasse-miettes. Appelez await request.ignore() lorsque vous n'avez pas besoin du corps de la requête. L'environnement d'exécution remet la connexion dans le pool une fois le corps entièrement lu.

Response

  • Définition

    Suit la spécification MDN Response.

  • Limites

    Les propriétés useFinalURLS et error ne sont pas prises en charge dans CDN, DCDN ou ESA.

  • Cas d'utilisation courants

    • Récupérer le code de réponse : response.status.

    • Récupérer le texte de raison de la réponse : response.statusText.

    • Récupérer les en-têtes de réponse : response.headers.

    • Récupérer l'URL de réponse : response.url. Il s'agit de l'URL finale après toutes les redirections.

    • Récupérer toutes les URL de redirection (non standard) : response.urlList. Response implémente un mixin de corps similaire à Request ; les mêmes méthodes de récupération du corps s'appliquent donc.

FormData

  • Définition

    Pour plus d'informations sur l'opération FormData, consultez FormData.

  • Limites

    L'opération FormData est similaire à l'opération Headers. FormData limite la taille des en-têtes. Le dépassement de cette limite lève une exception. Si vous envoyez FormData en tant que corps de requête HTTP, content-type est défini sur form-data/multipart par défaut.

URLSearchParams

  • Définition

    Pour plus d'informations sur l'opération URLSearchParams, consultez URLSearchParams().

  • Limites

    Si vous envoyez URLSearchParams en tant que corps de requête HTTP, content-type est défini sur application/x-www-form-urlencode par défaut. La taille des données ne peut pas dépasser 1 000 octets.

Blob et File

  • Définition

    • Pour plus d'informations sur l'opération Blob, consultez Blob.

    • Pour plus d'informations sur l'opération File, consultez File.

  • Limites

    ER prend en charge les classes Blob et File, conformes aux standards des opérations Blob et File. ER ne peut ni lire ni écrire de fichiers. Vous pouvez passer les classes Blob et File prises en charge par ER au corps de réponse. La valeur de l'en-tête content-type correspond au type MIME de l'opération Blob ou File.