Elide expone Blob, File, Headers, FormData, Request,
Response y fetch como globales.
Blob y File
const blob = new Blob(["hello"]);
await blob.text(); // "hello"
await blob.bytes(); // Uint8Array(5)
const file = new File(["hello"], "greeting.txt", {
type: "text/plain",
lastModified: 1700000000000,
});
file instanceof Blob; // trueLos lectores de Blob incluyen text(), arrayBuffer(), bytes() y
stream(). slice() devuelve un Blob. File añade name y
lastModified.
Headers
const headers = new Headers([["X-Custom", "1"]]);
headers.append("X-Custom", "2");
headers.get("x-custom"); // "1, 2"
headers.append("Set-Cookie", "a=1");
headers.getSetCookie(); // ["a=1"]Los nombres no distinguen mayúsculas y minúsculas. La iteración pasa los nombres a minúsculas y los ordena, combina la mayoría
de los valores duplicados y mantiene separados los valores de Set-Cookie. Los nombres o valores no válidos
lanzan TypeError. Las protecciones de petición, respuesta, no-CORS e inmutabilidad
restringen las modificaciones cuando corresponde.
FormData
FormData es una lista, en orden de inserción, de valores de cadena o File.
const form = new FormData();
form.append("tag", "first");
form.append("tag", "second");
form.getAll("tag"); // ["first", "second"]
form.append("upload", new Blob(["hello"], { type: "text/plain" }));
form.get("upload").name; // "blob"Un Blob se normaliza a File al añadirse. set() sustituye la primera
entrada coincidente y elimina los duplicados posteriores.
Cuerpos de Request y Response
Ambas clases exponen body, bodyUsed, arrayBuffer(), blob(),
bytes(), formData(), json() y text().
Las entradas de cuerpo admitidas incluyen cadenas, blobs, buffer sources, FormData,
URLSearchParams y ReadableStream. Las peticiones GET y HEAD rechazan un cuerpo
no nulo. Un cuerpo de petición en forma de flujo requiere duplex: "half".
const request = new Request("https://example.invalid/", {
method: "POST",
body: "hello",
});
await request.text(); // "hello"
const response = Response.json({ ok: true });
await response.json(); // { ok: true }Las URL de las peticiones deben ser absolutas. Los estados del constructor de Response están limitados a
200–599. Response.redirect() también requiere una URL absoluta.
Response.error(), Response.redirect(), Response.json() y
clone() están disponibles.
fetch
fetch(input, init?) acepta una URL, una cadena de URL o un Request y devuelve una
Promise que se resuelve cuando llegan las cabeceras de la respuesta. El cuerpo de la respuesta es un
ReadableStream: los fragmentos están disponibles antes de que el servidor termine de enviar la
respuesta. Métodos como response.text() consumen el flujo hasta el final.
Los cuerpos de las peticiones también pueden ser flujos. Cancelar el cuerpo de una respuesta cierra su flujo
de red; un AbortSignal puede cancelar el despacho o las lecturas posteriores del cuerpo. Los modos de
redirección y los metadatos de integridad se aplican durante el despacho. La verificación de integridad
almacena en búfer hasta 100 MiB y termina antes de exponer la respuesta.
Las respuestas gzip y deflate se decodifican una vez conservando sus cabeceras de respuesta. HTTPS valida las cadenas de certificados y los nombres de host de forma predeterminada; la configuración de confianza adicional se enumera en Variables de entorno del runtime.
fetch habla HTTP/1.1 y HTTP/2 sobre el
transporte nativo de Elide. Use elide info para inspeccionar
el transporte y el proveedor TLS seleccionados. Se admiten los proxies HTTP seleccionados por el
ProxySelector del host, incluido HTTPS CONNECT. Los proxies autenticados y
los tipos de proxy no admitidos fallan de forma explícita.
La compresión se documenta por separado en Flujos de compresión. Las opciones y el ciclo de vida del servidor HTTP pertenecen a la referencia del global Elide.
Valores predeterminados de HTTP y compresión
Fetch envía User-Agent: Elide/<version> y Accept: */*. Sustituya cualquiera de ellos con cabeceras de petición normales:
await fetch(url, { headers: { "User-Agent": "my-service/1.0" } });Defina ELIDE_HTTP_USER_AGENT para cambiar el valor predeterminado del proceso. Quienes integran la JVM pueden usar la
propiedad del sistema elide.http.userAgent; tiene prioridad sobre el entorno. Una cabecera por petición
tiene prioridad sobre ambos ajustes. Los valores configurados deben ser ASCII imprimible.
Fetch anuncia y decodifica gzip, deflate, Brotli y Zstandard con los códecs disponibles en el runtime.
La alternativa de compresión solo con el JDK anuncia gzip y deflate. Las cabeceras Accept-Encoding explícitas
se conservan. Las peticiones de rango usan identity de forma predeterminada. Las cabeceras de respuesta describen la respuesta codificada incluso después de decodificar el cuerpo.
const response = await fetch(url, { decompress: false });
const encodedBytes = await response.arrayBuffer();Con decompress: false, el Accept-Encoding predeterminado es identity; si un servidor envía de todos modos
contenido comprimido, se devuelve sin cambios. Esto es útil al hacer de proxy de respuestas codificadas. En otro caso,
la decodificación automática sigue funcionando en streaming y rechaza los cuerpos comprimidos mal formados.
Las cabeceras condicionales como If-None-Match e If-Modified-Since se envían normalmente. Una respuesta 304
conserva sus cabeceras y no tiene cuerpo; fetch no mantiene una caché HTTP al estilo de un navegador.
Al servir, las respuestas codificadas siguen bajo el control de la aplicación: envíe el cuerpo codificado con su
Content-Encoding, y use Vary: Accept-Encoding al negociar representaciones. Elide no
vuelve a comprimir silenciosamente los cuerpos de las respuestas.
Reference
Status: Full · 1,455 of 2,511 suite tests pass (57.9%) · since 1.1.0
Exports
| Export | Kind | Status | Notes |
|---|---|---|---|
Headers | class | Full | append(), delete(), get(), getSetCookie(), has(), set(), iteration |
Request | class | Full | method, url, headers, destination, referrer, referrerPolicy, mode, credentials, cache, redirect, integrity, keepalive, signal, duplex, clone(), body, bodyUsed, arrayBuffer(), blob(), bytes(), formData(), json(), text() |
Response | class | Full | Response.error(), Response.redirect(), Response.json(), type, url, redirected, status, ok, statusText, headers, clone(), body, bodyUsed, arrayBuffer(), blob(), bytes(), formData(), json(), text() |
Blob | class | Full | size, type, slice(), text(), arrayBuffer(), bytes(), stream() |
File | class | Full | name, lastModified |
FormData | class | Full | append(), delete(), get(), getAll(), has(), set(), iteration |
Tests: wpt-wintertc fetch: 1,455 pass, 1,043 fail, 13 error, 400 skipped. Failing: fetch/api/basic/request-forbidden-headers.any.js (96), fetch/api/redirect/redirect-referrer-override.any.js (91), fetch/data-urls/processing.any.js (68), fetch/api/headers/header-values-normalize.any.js (57), fetch/api/cors/cors-keepalive.any.js (51), fetch/api/cors/cors-preflight-star.any.js (34), fetch/api/redirect/redirect-origin.any.js (30), fetch/api/cors/cors-preflight-status.any.js (27), and 110 more.