Window: fetch()-Methode

Baseline Widely available *

This feature is well established and works across many devices and browser versions. It’s been available across browsers since March 2017.

* Some parts of this feature may have varying levels of support.

Die fetch()-Methode des Window-Interfaces startet den Prozess des Abrufens einer Ressource aus dem Netzwerk und gibt ein Promise zurück, das erfüllt wird, sobald die Antwort verfügbar ist.

Das Promise wird auf das Response-Objekt aufgelöst, welches die Antwort auf Ihre Anfrage repräsentiert.

Ein fetch()-Promise wird nur dann abgelehnt, wenn die Anfrage fehlschlägt, zum Beispiel aufgrund einer schlecht formatierten Anfrage-URL oder eines Netzwerkfehlers. Ein fetch()-Promise wird nicht abgelehnt, wenn der Server mit HTTP-Statuscodes antwortet, die auf Fehler hinweisen (404, 504 usw.). Stattdessen muss ein then()-Handler die Response.ok- und/oder Response.status-Eigenschaften prüfen.

Die fetch()-Methode wird durch die connect-src-Richtlinie der Content Security Policy gesteuert und nicht durch die Richtlinie der abzurufenden Ressourcen.

Hinweis: Die Parameter der fetch()-Methode sind identisch mit denen des Request()-Konstruktors.

Syntax

js
fetch(resource)
fetch(resource, options)

Parameter

resource

Dies definiert die Ressource, die Sie abrufen möchten. Dies kann entweder sein:

  • Ein String oder ein anderes Objekt mit einem Stringifier — einschließlich eines URL-Objekts —, das die URL der abzurufenden Ressource angibt. Die URL kann relativ zur Basis-URL sein, welche die baseURI des Dokuments in einem Fensterkontext oder WorkerGlobalScope.location in einem Worker-Kontext ist.
  • Ein Request-Objekt.
options Optional

Ein RequestInit-Objekt, das benutzerdefinierte Einstellungen enthält, die Sie auf die Anfrage anwenden möchten.

Rückgabewert

Ein Promise, das auf ein Response-Objekt aufgelöst wird.

Ausnahmen

AbortError DOMException

Die Anfrage wurde durch einen Aufruf der AbortController-Methode abort() abgebrochen.

NotAllowedError DOMException

Wird ausgelöst, wenn die Nutzung der Topics API speziell durch eine browsing-topics-Permission Policy untersagt ist und eine fetch()-Anfrage mit browsingTopics: true gestellt wurde.

TypeError

Kann aus folgenden Gründen auftreten:

Grund Fehlerhafte Beispiele
Durch eine Rechtepolitik blockiert Die Nutzung der Attribution Reporting API wird durch eine attribution-reporting Permissions-Policy blockiert, und eine fetch()-Anfrage wurde mit attributionReporting spezifiziert.
Ungültiger Header-Name.
// Leerzeichen in "C ontent-Type"
const headers = {
  'C ontent-Type': 'text/xml',
  'Breaking-Bad': '<3',
};
fetch('https://example.com/', { headers });
        
Ungültiger Header-Wert. Das Header-Objekt muss genau zwei Elemente enthalten.
const headers = [
  ['Content-Type', 'text/html', 'extra'],
  ['Accept'],
];
fetch('https://example.com/', { headers });
        
Ungültige URL oder Schema, Nutzung eines Schemas, das fetch nicht unterstützt, oder Nutzung eines Schemas, das für einen bestimmten Anfragemodus nicht unterstützt wird.
fetch('blob://example.com/', { mode: 'cors' });
        
URL enthält Anmeldedaten.
fetch('https://user:password@example.com/');
        
Ungültige Referrer-URL.
fetch('https://example.com/', { referrer: './abc\u0000df' });
        
Ungültige Modi (navigate und websocket).
fetch('https://example.com/', { mode: 'navigate' });
        
Wenn der Anfragemodus auf "only-if-cached" gesetzt ist und der Abrufmodus nicht "same-origin" ist.
fetch('https://example.com/', {
  cache: 'only-if-cached',
  mode: 'no-cors',
});
        
Wenn die Anfragemethode ein ungültiges Token ist oder eine der verbotenen Header ('CONNECT', 'TRACE' oder 'TRACK') enthält.
fetch('https://example.com/', { method: 'CONNECT' });
        
Wenn der Anfragemodus "no-cors" ist und die Anfragemethode keine CORS-sicheren Methoden ('GET', 'HEAD' oder 'POST') verwendet.
fetch('https://example.com/', {
  method: 'CONNECT',
  mode: 'no-cors',
});
        
Wenn die Anfragemethode 'GET' oder 'HEAD' ist und der Body nicht null oder undefined ist.
fetch('https://example.com/', {
  method: 'GET',
  body: new FormData(),
});
        
Wenn fetch einen Netzwerkfehler auslöst.

Beispiele

In unserem Fetch Request Beispiel (siehe Fetch Request live) erstellen wir ein neues Request-Objekt mit dem entsprechenden Konstruktor und rufen es dann mit einer fetch()-Anfrage ab. Da wir ein Bild abrufen, führen wir Response.blob() auf die Antwort aus, um ihr den richtigen MIME-Typ zu geben, damit sie korrekt verarbeitet wird. Anschließend erstellen wir eine Object-URL davon und zeigen sie in einem <img>-Element an.

js
const myImage = document.querySelector("img");

const myRequest = new Request("flowers.jpg");

window
  .fetch(myRequest)
  .then((response) => {
    if (!response.ok) {
      throw new Error(`HTTP error! Status: ${response.status}`);
    }

    return response.blob();
  })
  .then((response) => {
    myImage.src = URL.createObjectURL(response);
  });

In unserem Fetch Request mit init Beispiel (siehe Fetch Request init live) tun wir dasselbe, jedoch übergeben wir beim Aufruf von fetch() ein options-Objekt. In diesem Fall können wir einen Cache-Control-Wert setzen, um anzugeben, welche Arten von zwischengespeicherten Antworten akzeptabel sind:

js
const myImage = document.querySelector("img");
const reqHeaders = new Headers();

// A cached response is okay unless it's more than a week old
reqHeaders.set("Cache-Control", "max-age=604800");

const options = {
  headers: reqHeaders,
};

// Pass init as an "options" object with our headers.
const req = new Request("flowers.jpg", options);

fetch(req).then((response) => {
  // ...
});

Sie könnten das init-Objekt auch im Request-Konstruktor übergeben, um den gleichen Effekt zu erzielen:

js
const req = new Request("flowers.jpg", options);

Sie können auch ein Objekt-Literal als headers in init verwenden:

js
const options = {
  headers: {
    "Cache-Control": "max-age=60480",
  },
};

const req = new Request("flowers.jpg", options);

Der Artikel Using fetch bietet weitere Beispiele für die Verwendung von fetch().

Spezifikationen

Specification
Fetch
# fetch-method

Browser-Kompatibilität

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
fetch
Authorization header removed from cross-origin redirects
Support for blob: and data:
Send ReadableStream in body
Experimental
init.attributionReporting parameter
Experimental
init.browsingTopics parameter
ExperimentalNon-standard
init.duplex parameter
Experimental
init.keepalive parameter
init.priority parameter
init.referrerPolicy parameter
init.signal parameter

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
No support
No support
Experimental. Expect behavior to change in the future.
Non-standard. Check cross-browser support before using.
See implementation notes.
Has more compatibility info.

Siehe auch