JavaScript/Objekte/Headers

Aus SELFHTML-Wiki
Wechseln zu: Navigation, Suche

Das Headers-Objekt im Fetch-API repräsentiert die HTTP-Header in einem HTTP-Request oder einer -Response und ist darin in der headers-Eigenschaft zu finden.

Du kannst ein Headers-Objekt selbst erzeugen, um sie in ein Request-Objekt für einen fetch-Aufruf einzusetzen. Dies muss beim Erzeugen des Request-Objekts über das RequestInit-Objekt geschehen, die headers-Eigenschaft im Request-Objekt kann nicht mehr geändert werden (der Inhalt des dort befindlichen Headers-Objekt aber schon).

Ein Headers-Objekt kann allerdings nur solange beliebig modifiziert werden, wie es keinem Request- oder Response-Objekt zugeordnet ist. Danach gelten folgende Regeln:

Für Request-Objekte
erzeugt mit mode=no-cors
Nur die für CORS als sicher gelisteten Header dürfen geändert werden[1]
in anderen Request-Objekten
Header, die nicht verboten sind[2], dürfen geändert werden
Beachte: Wenn Du versuchst, ein Request-Objekt zu erzeugen und dabei ein Headers-Objekt mitgibst, worin Header stehen, die in diesem Request-Objekt nicht geändert werden dürfen, werden sie nicht in das Request-Objekt übernommen.
Für Response-Objekte
erzeugt durch fetch(), Response.error() oder Response.redirect()
Das Header-Objekt ist unveränderlich. Änderungsversuche werfen einen TypeError
erzeugt durch new Response() oder Response.json()
Header, die nicht verboten sind[2], dürfen geändert werden

ToDo (weitere ToDos)

Ausdetaillieren

Soweit dies ein Stub ist, schau bitte auf den Übersichtsseiten vom Fetch-API oder bei MDN unter Headers nach.

Erzeugen eines Headers-Objekts

Headers-Objekte werden zumeist implizit erzeugt, aber du kannst auch explit die Konstruktorfunktion aufrufen.

   const headers = new Headers( init );

init ist die Kopiervorlage für die Header, die sich im Headers-Objekt befinden sollen. Es gibt dafür drei Formen:

  • ein Objektliteral, dessen Eigenschaftsnamen Header-Namen und die zugehörigen Werte die Header-Werte sind (als Strings)
  • ein anderes Headers-Objekt
  • ein Iterable, wie es von Object.fromEntries() verstanden wird.

Der Headers-Konstruktor akzeptiert alle Header. Die Prüfung, ob ein Header erlaubt ist, findet erst später statt.

Auslesen eines Headers-Objekts

Einfache Zugriffsmethiden

  • Headers.get(name) -> string
  • Headers.getSetCookie() -> Array<string>
  • Headers.has(name) -> bool
Beachte: die getAll()-Methode war einmal spezifiziert, wurde aber aus dem Standard entfernt und ist zumindest in Chromium-Browsern nicht mehr vorhanden.

Iterationsmethoden

  • Headers.entries(name) -> Iterator<Array<string>>
  • Headers.forEach(callback) -> bool
  • Headers.keys() -> Iterator<string>
  • Headers.values() -> Iterator<string>

Verändern eines Headers-Objekts

Ein Headers-Objekt, das unveränderlich ist, wirft bei Modifikationen einen TypeError!

  • Headers.append()
  • Headers.delete()
  • Headers.set()

Links

  1. MDN: CORS safelisted request headers
  2. 2,0 2,1 MDN: Verbotene Request-Header