Start · Sprachen · JavaScript · Referenz · Request.method

Request.method

Eigenschaft

Die schreibgeschützte Eigenschaft <code>Request.method</code> gibt die HTTP-Methode einer Anfrage als String zurück, z. B. <code>"GET"</code> oder <code>"POST"</code>.

seit JavaScript Baseline: alle modernen Browser (seit 2017), Node. Kategorie: webapi

Signatur

Request.method

Beschreibung

Request.method enthält die HTTP-Methode, mit der ein Request-Objekt gesendet wird. Die Methode wird beim Erzeugen über die Option method im Konstruktor new Request(url, { method }) festgelegt. Ohne Angabe ist der Wert "GET". Wird ein bestehender Request als erstes Argument übergeben, übernimmt der neue Request dessen Methode, sofern sie nicht ausdrücklich überschrieben wird.

Die Eigenschaft ist schreibgeschützt. Möchtest du die Methode ändern, musst du einen neuen Request anlegen, etwa mit new Request(alterRequest, { method: 'PUT' }). Eine direkte Zuweisung wie request.method = 'POST' wird ohne Fehlermeldung ignoriert (im Strict Mode gibt es einen TypeError).

In der Praxis brauchst du die Eigenschaft vor allem in Service Workern und in Middleware: Im fetch-Ereignis prüfst du mit event.request.method, ob eine Anfrage in den Cache darf. Die Cache API speichert nur GET-Anfragen. Auch Logging, Routing in serverseitigen Fetch-Umgebungen (Node.js, Deno, Cloudflare Workers) und Wrapper um fetch() werten method häufig aus.

Beim Erzeugen wird die Methode normalisiert: Die Standardmethoden DELETE, GET, HEAD, OPTIONS, POST und PUT werden unabhängig von der Schreibweise in Großbuchstaben umgewandelt. Alle anderen Methoden, auch PATCH, bleiben genau so, wie du sie angegeben hast.

Rückgabewert

Typ
string
Beschreibung
Die HTTP-Methode der Anfrage, z. B. "GET", "POST", "PUT", "DELETE". Ohne Angabe im Konstruktor ist der Wert "GET".

Beispiele

Methode auslesen und Normalisierung beobachten

const standard = new Request('https://api.example.com/users');
const anlegen = new Request('https://api.example.com/users', {
  method: 'post',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ name: 'Anna' })
});

console.log(standard.method); // Standardwert
console.log(anlegen.method);  // 'post' wird zu 'POST'
GET POST

Service Worker: nur GET-Anfragen cachen

// sw.js
self.addEventListener('fetch', (event) => {
  const { request } = event;

  // POST, PUT, DELETE usw. direkt ans Netz weiterleiten
  if (request.method !== 'GET') return;

  event.respondWith((async () => {
    const cache = await caches.open('v1');
    const cached = await cache.match(request);
    if (cached) return cached;

    const response = await fetch(request);
    if (response.ok) await cache.put(request, response.clone());
    return response;
  })());
});

Methode ändern: neuen Request aus bestehendem ableiten

const original = new Request('https://api.example.com/items/42');

// Zuweisung wird ignoriert, method ist schreibgeschützt
original.method = 'DELETE';
console.log(original.method);

// Richtig: neuen Request mit überschriebener Methode erzeugen
const loeschen = new Request(original, { method: 'DELETE' });
console.log(loeschen.method, loeschen.url);
GET DELETE https://api.example.com/items/42

Fallstrick: PATCH wird nicht normalisiert

const klein = new Request('https://api.example.com/items/1', { method: 'patch' });
const gross = new Request('https://api.example.com/items/1', { method: 'PATCH' });

console.log(klein.method); // bleibt klein geschrieben
console.log(gross.method);

// Verbotene Methoden werfen einen Fehler
try {
  new Request('https://example.com', { method: 'TRACE' });
} catch (err) {
  console.log(err.name);
}
patch PATCH TypeError

// Wichtig · Fallstricke

  • Groß- und Kleinschreibung: Nur DELETE, GET, HEAD, OPTIONS, POST und PUT werden in Großbuchstaben umgewandelt. 'patch' bleibt klein geschrieben, und viele Server und Proxys lehnen das mit 405 oder 400 ab. Schreib PATCH deshalb immer groß.
  • Verbotene Methoden: CONNECT, TRACE und TRACK lösen im Konstruktor einen TypeError aus. Ungültige Methodennamen, z. B. mit Leerzeichen, ebenfalls.
  • Body bei GET/HEAD: Übergibst du bei GET oder HEAD einen body, gibt es einen TypeError.
  • Modus no-cors: Erlaubt sind nur GET, HEAD und POST. Andere Methoden führen zu einem TypeError.
  • CORS: Methoden außer GET, HEAD und POST lösen bei Cross-Origin-Anfragen eine Preflight-Anfrage (OPTIONS) aus. Der Server muss sie über Access-Control-Allow-Methods erlauben.
  • Cache API: cache.put() wirft bei Requests, deren Methode nicht GET ist, einen TypeError. Prüfe request.method deshalb vor dem Cachen.
  • Kompatibilität: Wird von allen modernen Browsern unterstützt. In Node.js ist Request ab Version 18 global verfügbar, ebenso in Deno, Bun und Cloudflare Workers.