Todos los productos
Search
Centro de documentos

Edge Security Acceleration:API Fetch

Última actualización: Sep 12, 2026

Obtenga datos desde los POP perimetrales mediante HTTP o HTTPS. La API Fetch funciona igual que la API Fetch del navegador y es compatible con la carga dinámica de contenido, la interacción con el backend y las pruebas A/B.

Definición del método

Fetch es completamente asíncrono y no bloquea la ejecución del script a menos que utilice await. Se admiten hasta cuatro subpeticiones simultáneas. Las conexiones persistentes se gestionan internamente.

Fetch es compatible con peticiones HTTP y HTTPS. Cada redirect cuenta como una subpetición, con un máximo de 12 operaciones de redirect por petición.

  • Definición del método

    fetch(arg, init). Este método sigue la especificación MDN WorkerOrGlobalScope.fetch().

  • Límites del método

    • La API Fetch solo admite nombres de dominio, no direcciones IP. Puertos predeterminados: 80 (HTTP), 443 (HTTPS).

    • Las propiedades credentials, referrer, referrerPolicy, cache e integrity del parámetro init no tienen ningún efecto.

    • El valor predeterminado de redirect es follow, lo cual sigue las respuestas 3xx del origen. Establezca redirect en manual para deshabilitar el seguimiento de redirecciones.

    Nota
    • Los modos Fetch específicos del navegador no aplican. En CDN, DCDN o ESA, CROS fetch permite recuperar datos de cualquier origen.

    • La longitud total de una URL de petición no puede superar los 4 KB.

    • Los recursos comprimidos con gzip que se obtienen se descomprimen de forma predeterminada. Agregue el parámetro manual para deshabilitar la descompresión. La sección Descompresión detalla este proceso.

  • Establezca un periodo de tiempo de espera

    • Función de tiempo de espera

      /**
       * 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);
        });
      };
    • Ejemplo de llamada

      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;
      }

Redirección

Fetch sigue las redirecciones 3xx (301, 302, 303, 307, 308). Especifique uno de estos tres comportamientos de redirección:

  • {redirect: "manual"}: No sigue las redirecciones 3xx. Usted debe gestionarlas manualmente.

  • {redirect: "error"}: Se genera un error ante respuestas 3xx.

  • {redirect: "follow"}: (Predeterminado) Sigue las redirecciones 3xx. Se pueden seguir hasta 20 redirecciones como máximo.

Comportamiento de redirección según el código de estado:

Código de estado

Detalles de la redirección

301, 302, 303, 308

El método de la petición cambia a GET y se ignora el cuerpo.

307

Solo se siguen los métodos GET. Para otros métodos se reporta un error.

Nota

Las redirecciones usan el encabezado Location, el cual es obligatorio. Si falta el encabezado Location, se produce un error.

  • El encabezado Location puede contener una lista de URL separadas por comas (,). Solo se utiliza la primera URL y se ignoran las demás.

  • El encabezado Location puede contener una URL absoluta o una URL relativa.

Descompresión

La API Fetch le permite configurar un modo de descompresión, por ejemplo: fetch("https://www.example.com",{decompress: "manual"}). El parámetro decompress admite los siguientes valores:

  • manual: no descomprime los datos. Si el servidor devuelve datos comprimidos ante una petición fetch, los datos que recibe EdgeRoutine (ER) también estarán comprimidos.

  • decompress: descomprime los datos automáticamente. Este es el valor predeterminado. La API Fetch es compatible con la compresión Gzip. ER detecta o descomprime los datos automáticamente según el encabezado Content-Encoding. Después de descomprimirlos, ER modifica el valor de Content-Encoding. Si se elimina el parámetro Gzip, configure los siguientes ajustes para evitar excepciones durante la transmisión de datos:

    • content-encoding: gzip: ER reconoce el valor de Content-Encoding y descomprime los datos.

    • content-encoding: gzip, identity: ER reconoce el valor de Content-Encoding y descomprime los datos.

    Nota

    Los algoritmos distintos de Gzip provocan excepciones.

  • fallbackIdentity: Este valor tiene un efecto similar al de decompress. Si ER no lo reconoce, no descomprime los datos.

Importante

Después de que la API Fetch descomprime los datos automáticamente, no es posible pasar el encabezado Content-Length según se requiera si la respuesta lo contiene. Esto ocurre porque dicho encabezado indica el tamaño de los datos antes de la descompresión.

content-length

Cuando se establece content-length, Fetch envía el cuerpo con la codificación content-length. Sin content-length, Fetch envía todos los datos del cuerpo mediante codificación fragmentada (chunked).

  • Configuraciones de content-length

    • Si content-length es un número no negativo: Fetch lee y envía la cantidad especificada de bytes desde el flujo del cuerpo. Los datos se envían con la codificación content-length. Si content-length es 0, no se envían datos.

    • Si content-length tiene un valor no válido: Fetch envía todos los datos del cuerpo mediante codificación fragmentada.

  • Ejemplo

    Fetch descomprime el contenido automáticamente. El encabezado content-length de la respuesta sigue reflejando el tamaño previo a la descompresión. Si modifica el cuerpo antes de reenviarlo, compruebe que content-length coincida con el tamaño real del cuerpo. Una discrepancia en content-length provoca una entrega incorrecta del contenido.

    En este ejemplo, un cliente envía una petición POST con un encabezado content-length. Si crea una nueva petición Fetch que reutiliza los encabezados del cliente, es posible que content-length no coincida con el nuevo tamaño del cuerpo. Compruebe siempre el tamaño del cuerpo cuando pase los encabezados.

    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

  • Definición

    Para obtener más información sobre el objeto Headers, consulte Headers.

  • Límites

    Un encabezado registra la cantidad de recursos de memoria consumidos. El tamaño máximo de un objeto Headers es de 8 KB. Si el tamaño de un objeto Headers supera este límite, se genera una excepción de JavaScript.

  • Lista de bloqueo

    La API Fetch utiliza una lista de bloqueo de encabezados. Si intenta leer o escribir un encabezado incluido en dicha lista, se genera una excepción. A continuación se describen los encabezados incluidos en la lista de bloqueo.

    • expect

    • te

    • trailer

    • upgrade

    • proxy-connection

    • connection

    • keep-alive

    • dnt

    • host

    • Encabezados reservados

Request

  • Definición

    Sigue la especificación MDN Request.

  • Límites

    Las siguientes propiedades de Request no son compatibles con CDN, DCDN ni ESA.

    • context

    • credentials

    • destination

    • integrity

    • mode

    • referrer

    • referrerPolicy

    • cache

  • Usos comunes

    • Recuperar el método de la petición: request.method.

    • Recuperar la URL de la petición: request.url.

    • Recuperar los encabezados de la petición: request.headers.

    • Recuperar la carga útil de la petición: request.body. El cuerpo es un objeto ReadableStream.

    • Recuperar JSON: await request.json().

    • Recuperar datos de formulario: await request.formData().

    • Recuperar una cadena UTF-8: await request.text().

    Como extensión no estándar, request.ignore vacía el flujo del cuerpo a nivel de socket sin cargarlo en la memoria de la máquina virtual de JavaScript, lo cual evita retrasos del recolector de basura. Llame a await request.ignore() cuando no necesite el cuerpo de la petición. El entorno de ejecución devuelve la conexión al pool después de leer el cuerpo por completo.

Response

  • Definición

    Sigue la especificación MDN Response.

  • Límites

    Las propiedades useFinalURLS y error no son compatibles con CDN, DCDN ni ESA.

  • Usos comunes

    • Recuperar el código de respuesta: response.status.

    • Recuperar la frase de motivo de la respuesta: response.statusText.

    • Recuperar los encabezados de la respuesta: response.headers.

    • Recuperar la URL de la respuesta: response.url. Esta es la URL final después de todas las redirecciones.

    • Recuperar todas las URL de redirección (no estándar): response.urlList. Response implementa un mixin de cuerpo igual que Request, por lo que aplican los mismos métodos para recuperar el cuerpo.

FormData

  • Definición

    Para obtener más información sobre la operación FormData, consulte FormData.

  • Límites

    La operación FormData es similar a la operación Headers. FormData limita el tamaño de los encabezados. Si el tamaño de un encabezado supera el límite superior, se genera una excepción. Si envía FormData como cuerpo de una petición HTTP, content-type se establece en form-data/multipart de forma predeterminada.

URLSearchParams

  • Definición

    Para obtener más información sobre la operación URLSearchParams, consulte URLSearchParams().

  • Límites

    Si envía URLSearchParams como cuerpo de una petición HTTP, content-type se establece en application/x-www-form-urlencode de forma predeterminada. El tamaño de los datos no puede superar los 1,000 bytes.

Blob y File

  • Definición

    • Para obtener más información sobre la operación Blob, consulte Blob.

    • Para obtener más información sobre la operación File, consulte File.

  • Límites

    ER es compatible con las clases Blob y File, las cuales cumplen con los estándares de las operaciones Blob y File. ER no puede leer ni escribir archivos. Puede pasar las clases Blob y File compatibles con ER al cuerpo de la respuesta. El valor del encabezado content-type es el mismo que el tipo MIME de la operación Blob o File.