Zum Hauptinhalt springen

RFC 8941 - Structured Field Values for HTTP (Strukturierte Feldwerte für HTTP)

  • Status: Proposed Standard
  • Veröffentlicht: February 2021
  • Stream: IETF
  • Ersetzt durch: RFC9651
  • Errata: Keine Errata

Zusammenfassung (Abstract)

Dieses Dokument beschreibt eine Reihe von Datentypen und zugehörigen Algorithmen, die die Definition und Verarbeitung von HTTP-Header- (header) und Trailer-Feldern (trailer) einfacher und sicherer machen sollen. Diese Felder werden als „Strukturierte Felder (Structured Fields)", „Strukturierte Header (Structured Headers)" oder „Strukturierte Trailer (Structured Trailers)" bezeichnet. Es richtet sich an neue HTTP-Feldspezifikationen, die eine strengere, allgemeine Syntax gegenüber herkömmlichen HTTP-Feldwerten bevorzugen.


Status dieses Dokuments (Status of This Memo)

Dies ist ein Internet-Standards-Track-Dokument.

Dieses Dokument ist ein Produkt der Internet Engineering Task Force (IETF). Es repräsentiert den Konsens der IETF-Gemeinschaft. Es wurde einer öffentlichen Überprüfung unterzogen und von der Internet Engineering Steering Group (IESG) zur Veröffentlichung genehmigt. Weitere Informationen zu Internetstandards finden Sie in Abschnitt 2 von RFC 7841.

Informationen zum aktuellen Status dieses Dokuments, zu etwaigen Errata und zur Bereitstellung von Feedback sind unter https://www.rfc-editor.org/info/rfc8941 verfügbar.


Inhaltsverzeichnis (Table of Contents)

Anhänge (Appendices)


Schnellübersicht der Kernkonzepte (Quick Reference)

Drei übergeordnete Datentypen

1. List (Liste)          - Geordnete Folge von Elementen
2. Dictionary (Wörterbuch) - Ungeordnete Zuordnung von Schlüssel-Wert-Paaren
3. Item (Element) - Einzelner Wert

Sechs grundlegende Datentypen

1. Integer (Ganzzahl)       - Bereich: -999.999.999.999.999 bis 999.999.999.999.999
2. Decimal (Dezimalzahl) - Bis zu 3 Nachkommastellen
3. String (Zeichenkette) - In doppelte Anführungszeichen eingeschlossener Text
4. Token (Bezeichner) - Bezeichner ohne Anführungszeichen
5. Byte Sequence (Bytefolge) - Binärdaten in Base64-Kodierung
6. Boolean (Wahrheitswert) - ?1 (wahr) oder ?0 (falsch)

Beispiele

List (Liste)

Example-List: "foo", "bar", baz
Example-List: 1, 2, (a b c)

Dictionary (Wörterbuch)

Example-Dict: a=1, b=2
Example-Dict: key="value", flag

Item (Element)

Example-Integer: 42
Example-String: "hello world"
Example-Token: application/json
Example-Boolean: ?1

Bedeutung

RFC 8941 ist eine zentrale Spezifikation der modernen HTTP-Infrastruktur und wird in vielen Bereichen eingesetzt:

1. HTTP/2 und HTTP/3 Header

  • Viele neue HTTP-Header verwenden das Format strukturierter Felder
  • Effizientere Binärkodierung

2. Client Hints (RFC 8942)

Sec-CH-UA: "Chromium";v="93", " Not;A Brand";v="99"
Sec-CH-Viewport-Width: 1024
Sec-CH-DPR: 2

3. CDN und Cache-Steuerung

CDN-Cache-Control: max-age=3600, s-maxage=7200

4. Moderne Web-Funktionen

  • Cross-Origin Resource Policy (CORP)
  • Cross-Origin Embedder Policy (COEP)
  • Viele sicherheitsbezogene Header

Warum strukturierte Felder benötigt werden

Probleme mit herkömmlichen HTTP-Headern

# Verschiedene Felder verwenden unterschiedliche Syntaxen:
Cache-Control: max-age=3600, private
Accept: text/html, application/json;q=0.9
Link: `https://example.com`; rel="preload"

# Jedes Feld benötigt einen eigenen Parser
# Fehleranfällig und schwer zu warten

Vorteile strukturierter Felder

# Einheitliche Syntax und Parsing-Regeln
Structured-Header: a=1, b=2, c=(x y z)

# Vorteile:
✓ Standardisierte Datentypen
✓ Eindeutige Parsing-Algorithmen
✓ Bessere Interoperabilität
✓ Unterstützung zukünftiger Optimierungen (z. B. Binärkodierung in HTTP/3)

Designprinzipien

1. Bewusste Strenge

  • Parsing-Fehler führen sofort zu einem Abbruch, ohne Korrekturversuche
  • Vermeidung von Mehrdeutigkeiten und Sicherheitsproblemen
  • Förderung der Interoperabilität

2. Vorwärtskompatibilität

  • Abstraktes Datenmodell von der Serialisierung getrennt
  • Zukünftig können effizientere Serialisierungsformate definiert werden

3. Praxisorientierung

  • Basierend auf Erfahrungen mit bestehenden HTTP-Feldern
  • Ausgewogenes Verhältnis zwischen Ausdrucksstärke und Komplexität

Schnellbeispiel

Definition eines neuen strukturierten Headers

Angenommen, wir definieren einen "Example-Priorities"-Header:

Spezifikationsdefinition:
-----------
Das HTTP-Headerfeld Example-Priorities ist ein strukturiertes Feld (Structured Field).
Sein Wert MUSS ein Wörterbuch (Dictionary) sein.
Die Schlüssel des Wörterbuchs sind Ressourcenbezeichner (Token), die Werte sind Prioritäten (Integer).

Beispiel:
-----
Example-Priorities: css=10, js=5, images=1

Parsen und Verwenden

// Pseudocode-Beispiel
const header = "css=10, js=5, images=1";
const dict = parseDictionary(header);

console.log(dict.get('css')); // 10
console.log(dict.get('js')); // 5
console.log(dict.get('images')); // 1


Zielgruppe

  • HTTP-Spezifikationsautoren: Zur Verwendung bei der Definition neuer HTTP-Header
  • Browser-Implementierer: Implementierung von Parse- und Serialisierungsalgorithmen
  • CDN- und Proxy-Entwickler: Verarbeitung moderner HTTP-Header
  • Web-Entwickler: Verständnis moderner HTTP-Header-Formate