Tous les produits
Search
Centre de documentation

Edge Security Acceleration:Fetch API

Dernière mise à jour :Sep 12, 2026

Récupérez des données depuis les points de présence (POP) Edge via HTTP ou HTTPS. L'API Fetch fonctionne comme l'API Fetch des navigateurs et prend en charge le chargement dynamique du contenu, l'interaction avec le backend et 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 concurrentes. Les connexions persistantes sont gérées 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 de redirect par requête.

  • Définition de la méthode

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

  • Limites de la méthode

    • L'API Fetch prend uniquement en charge les noms de domaine, et non les adresses IP. Ports par défaut : 80 (HTTP), 443 (HTTPS).

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

    • redirect est défini par défaut sur follow, ce qui suit les réponses 3xx provenant 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 peut récupérer des données depuis n'importe quelle origine.

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

    • Les ressources compressées en gzip récupérées sont décompressées par défaut. Ajoutez le paramètre manual pour désactiver la décompression. La section Décompression couvre les détails.

  • Définir une période de délai d'attente

    • Fonction de délai d'attente

      /**
       * 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 générée pour les réponses 3xx.

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

Comportement de redirection par code d'état :

Code d'état

Détails de la redirection

301, 302, 303, 308

La méthode de requête est changée en 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 l'en-tête Location 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 une URL relative.

Décompression

L'API Fetch vous permet de configurer un mode de décompression, tel que fetch("https://www.example.com",{decompress: "manual"}). Le paramètre decompress prend en charge 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) sont également compressées.

  • decompress : décompresse automatiquement les données. Il s'agit de la valeur par défaut. L'API Fetch prend en charge la compression Gzip. ER détecte ou décompresse automatiquement les données en fonction de l'en-tête Content-Encoding. Après la décompression des données par ER, ER modifie la valeur de Content-Encoding. Si le paramètre Gzip est supprimé, vous pouvez configurer 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 la valeur decompress. Si ER ne peut pas reconnaître cette valeur, ER ne décompresse pas les données.

Important

Après la décompression automatique des données par l'API Fetch, vous ne pouvez pas transmettre l'en-tête Content-Length selon vos besoins si la réponse contient l'en-tête Content-Length. En effet, l'en-tête 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 chunked.

  • Paramètres de 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 en utilisant l'encodage content-length. Si content-length est égal à 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 chunked.

  • Exemple

    Fetch décompresse le contenu automatiquement. L'en-tête content-length de la réponse 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 livraison 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, le content-length peut 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 enregistre la quantité de ressources mémoire consommées. La taille maximale d'un objet Headers est de 8 Ko. Si la taille d'un objet Headers dépasse cette limite, une exception JavaScript est levée.

  • Liste noire

    L'API Fetch utilise une liste noire d'en-têtes. Si vous tentez de lire ou d'écrire un en-tête figurant dans la liste noire, une exception est levée. Le tableau suivant décrit les en-têtes inclus dans la liste noire.

    • 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 sur CDN, DCDN ou ESA.

    • context

    • credentials

    • destination

    • integrity

    • mode

    • referrer

    • referrerPolicy

    • cache

  • Utilisations courantes

    • 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 la requête : request.body. Le corps est un objet ReadableStream.

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

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

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

    En tant qu'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 retards du garbage collector (GC). Appelez await request.ignore() lorsque vous n'avez pas besoin du corps de la requête. Le runtime renvoie la connexion au pool après la lecture complète du corps.

Response

  • Définition

    Suit la spécification MDN Response.

  • Limites

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

  • Utilisations courantes

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

    • Récupérer la phrase 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 comme Request, donc les mêmes méthodes de récupération du corps s'appliquent.

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. Si la taille d'un en-tête dépasse la limite supérieure, une exception est levée. Si vous envoyez FormData en tant que corps de requête HTTP, content-type est défini par défaut sur form-data/multipart.

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 par défaut sur application/x-www-form-urlencode. 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, qui respectent les normes des opérations Blob et File. ER ne peut ni lire ni écrire de fichiers. Vous pouvez transmettre les classes Blob et File prises en charge par ER au corps de la réponse. La valeur de l'en-tête content-type est identique au type MIME dans l'opération Blob ou File.