Elide stellt Blob, File, Headers, FormData, Request, Response und
fetch als Globals bereit.
Blob und 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; // trueZu den Lesemethoden von Blob gehören text(), arrayBuffer(), bytes() und
stream(). slice() gibt einen Blob zurück. File ergänzt name und
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"]Namen beachten keine Groß- und Kleinschreibung. Die Iteration schreibt Namen klein
und sortiert sie, fasst die meisten doppelten Werte zusammen und hält Werte von
Set-Cookie getrennt. Ungültige Namen oder Werte werfen TypeError. Guards für
Request, Response, No-CORS und Unveränderlichkeit schränken Änderungen ein, wo
zutreffend.
FormData
FormData ist eine Liste von String- oder File-Werten in Einfügereihenfolge.
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"Ein Blob wird beim Anhängen zu einem File normalisiert. set() ersetzt den ersten
passenden Eintrag und entfernt spätere Duplikate.
Bodys von Request und Response
Beide Klassen stellen body, bodyUsed, arrayBuffer(), blob(), bytes(),
formData(), json() und text() bereit.
Unterstützte Body-Eingaben sind Zeichenketten, Blobs, Buffer-Quellen, FormData,
URLSearchParams und ReadableStream. GET- und HEAD-Anfragen lehnen einen Body
ungleich null ab. Ein Stream als Anfrage-Body erfordert 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 }Anfrage-URLs müssen absolut sein. Statuscodes im Response-Konstruktor sind auf
200–599 beschränkt. Response.redirect() erfordert ebenfalls eine absolute URL.
Response.error(), Response.redirect(), Response.json() und clone() sind
verfügbar.
fetch
fetch(input, init?) akzeptiert eine URL, eine URL-Zeichenkette oder einen Request
und gibt ein Promise zurück, das aufgelöst wird, wenn die Antwort-Header eintreffen.
Der Antwort-Body ist ein ReadableStream: Chunks stehen zur Verfügung, bevor der
Server das Senden der Antwort abgeschlossen hat. Methoden wie response.text()
konsumieren den Stream vollständig.
Anfrage-Bodys können ebenfalls Streams sein. Das Abbrechen eines Antwort-Bodys
schließt seinen Netzwerk-Stream; ein AbortSignal kann das Absenden oder spätere
Lesevorgänge des Bodys abbrechen. Redirect-Modi und Integritätsmetadaten werden beim
Absenden angewendet. Die Integritätsprüfung puffert bis zu 100 MiB und wird
abgeschlossen, bevor die Antwort bereitgestellt wird.
Gzip- und Deflate-Antworten werden einmal dekodiert, wobei ihre Antwort-Header erhalten bleiben. HTTPS prüft standardmäßig Zertifikatsketten und Hostnamen; zusätzliche Vertrauenskonfiguration ist unter Laufzeit-Umgebungsvariablen aufgeführt.
fetch spricht HTTP/1.1 und HTTP/2 über den
nativen Transport von Elide. Mit elide info
untersuchen Sie den gewählten Transport und TLS-Provider. Vom ProxySelector des
Hosts gewählte HTTP-Proxys werden unterstützt, einschließlich HTTPS CONNECT.
Authentifizierte Proxys und nicht unterstützte Proxy-Typen schlagen explizit fehl.
Die Komprimierung ist separat unter Compression Streams beschrieben. Optionen und Lebenszyklus des HTTP-Servers gehören zur Referenz zum Elide-Global.
HTTP-Standardwerte und Komprimierung
Fetch sendet User-Agent: Elide/<version> und Accept: */*. Überschreiben Sie beides mit
gewöhnlichen Anfrage-Headern:
await fetch(url, { headers: { "User-Agent": "my-service/1.0" } });Setzen Sie ELIDE_HTTP_USER_AGENT, um den Standard des Prozesses zu ändern. JVM-Einbettungen
können die Systemeigenschaft elide.http.userAgent verwenden; sie hat Vorrang vor der Umgebung.
Ein Header pro Anfrage hat Vorrang vor beiden Einstellungen. Konfigurierte Werte müssen
druckbares ASCII sein.
Fetch kündigt gzip, deflate, Brotli und Zstandard an und dekodiert sie mit den verfügbaren Codecs
der Laufzeitumgebung. Der reine JDK-Rückfall für die Komprimierung kündigt gzip und deflate an.
Explizite Accept-Encoding-Header bleiben erhalten. Range-Anfragen verwenden standardmäßig
identity. Antwort-Header beschreiben die kodierte Antwort auch nach der Dekodierung des Bodys.
const response = await fetch(url, { decompress: false });
const encodedBytes = await response.arrayBuffer();Mit decompress: false ist das standardmäßige Accept-Encoding gleich identity; ein Server,
der trotzdem komprimierten Inhalt sendet, wird unverändert zurückgegeben. Das ist nützlich, wenn
kodierte Antworten durchgereicht werden. Ansonsten bleibt die automatische Dekodierung
streamend und lehnt fehlerhafte komprimierte Bodys ab.
Bedingte Header wie If-None-Match und If-Modified-Since werden normal gesendet. Eine
304-Antwort behält ihre Header und hat keinen Body; fetch unterhält keinen HTTP-Cache im Stil
eines Browsers.
Beim Bereitstellen bleiben kodierte Antworten unter Kontrolle der Anwendung: Senden Sie den
kodierten Body mit seinem Content-Encoding und verwenden Sie Vary: Accept-Encoding, wenn Sie
Repräsentationen aushandeln. Elide komprimiert Antwort-Bodys nicht stillschweigend neu.
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.