Zum Hauptinhalt springen

Appendix B. Implementation Notes (Implementierungshinweise)

Dieser Anhang bietet praktische Ratschläge und Best Practices zur Implementierung von RFC 8941.


Generische Implementierungsarchitektur

Generische Implementierungen sollten (SHOULD) serialize (Abschnitt 4.1) und parse (Abschnitt 4.2) Funktionen der obersten Ebene bereitstellen.

// Funktionale API
const result = parseList(input);
const output = serializeDict(dict);

// Objektorientierte API
const parser = new StructuredFieldParser();
const result = parser.parseList(input);

Vollständigkeit und Konsistenz

Für Interoperabilität müssen (MUST) generische Implementierungen vollständig sein und strikt den Algorithmen folgen (Abschnitt 1.1).

Community-Testsuite

URL: https://github.com/httpwg/structured-field-tests

Abdeckung: Serialisierung, Parsing, Grenzfälle, Fehlerbedingungen, Interoperabilitätstests.


Geordnete Abbildungen

Dictionaries und Parameters sind ordnungserhaltende Abbildungen. Implementierungen sollten (SHOULD) diese Reihenfolge beibehalten.

// ✓ Gut - erhält Reihenfolge
class OrderedDict {
constructor() {
this.items = []; // [{key, value}, ...]
}
}

// ✗ Schlecht - garantiert keine Reihenfolge
const dict = {};

Token vs. String Unterscheidung

Implementierungen sollten (SHOULD) die Unterscheidung zwischen Token und String beibehalten.

// ✓ Gut - behält Typ
const value = {type: 'token', value: 'text/html'};
const value2 = {type: 'string', value: 'text/html'};

Fehlerbehandlung

Bei Parse-Fehler müssen (MUST) Implementierungen das gesamte Feld ignorieren.

function parseStructuredField(input, type) {
try {
return parse(input, type);
} catch (error) {
return null; // Gesamtes Feld ignorieren
}
}

Sicherheitscheckliste

  • Maximale Feldgröße begrenzen
  • Anzahl der List/Dictionary-Mitglieder begrenzen
  • String-Länge begrenzen
  • Alle Typen strikt validieren
  • Doppelte Schlüssel ablehnen
  • Bei Fehler korrekt fehlschlagen

Test-Best-Practices

  1. Community-Testsuite verwenden
  2. Grenzfälle testen
  3. Fehlerfälle testen
  4. Roundtrip-Tests: serialize(parse(x)) == x
  5. Interoperabilitätstests

Wichtige Punkte

  1. Algorithmen folgen: Strikt an Spezifikation halten
  2. Testsuite verwenden: Mit Community-Tests validieren
  3. Reihenfolge bewahren: Dictionary- und Parameter-Reihenfolge beibehalten
  4. Typen unterscheiden: Token vs. String
  5. Korrekt fehlschlagen: Gesamtes Feld bei Fehler ignorieren
  6. Sicherheitsgrenzen: Vernünftige Größengrenzen implementieren