---
title: "ADR-0011: Vault-Streaming erhalten, ohne zum PHP-Streamhandler auszuweichen"
manual: "HTTP Guard"
version: "0.1.4"
permalink: "https://docs.typo3.org/permalink/netresearch/nr-http-guard:adr-0011@0.1.4"
source: "Adr/ADR-0011-VaultStreamingAndCancellation.rst"
rendered: "2026-10-18T14:31:43+00:00"
---

# ADR-0011: Vault-Streaming erhalten, ohne zum PHP-Streamhandler auszuweichen {#adr-0011}

-   *Status:* Historischer Vorschlag (Original: Vorgeschlagen)
-   *Datum:* 2026-10-08
-   *Entscheidungsträger im Original:* Projektverantwortliche Architektur/Security; Freigabe noch ausstehend
-   *Anforderungen:* HG-028, HG-029, HG-030, HG-036, HG-037
-   *Ablösung im Original:* keine; neue Entscheidung für das vorgeschlagene Produkt
-   *Originalquelle:* [Unveränderter ADR-0011](https://github.com/netresearch/typo3_http_guard/blob/3f929ae8794ca04ab3dd25627e94d601a2db23e0/specification/adr/ADR-0011-vault-streaming-und-cancellation.md)

> [!NOTE]
> Dieser ADR gibt den vollständigen Vorschlag vom 2026-10-08 wieder. Status,
> ausstehende Freigaben und geplante Tests beschreiben diesen Originalstand.
> Die aktuelle Alpha-Arbeit ist vom Nutzer freigegeben. Den heutigen
> Paketaufbau beschreibt [ADR-0015: Eine installierbare Extension](https://docs.typo3.org/permalink/netresearch/nr-http-guard:adr-0015@0.1.4); für das aktuelle
> Sicherheitsverhalten und die ausgeführten Nachweise gelten [Schutzmodell und Grenzen](https://docs.typo3.org/permalink/netresearch/nr-http-guard:security@0.1.4)
> und [Dokumentierte Prüfstände](https://docs.typo3.org/permalink/netresearch/nr-http-guard:verification-report@0.1.4). Der hier beschriebene nr-vault-Adapter ist eine
> historische Referenzintegration; seine Bereitstellung ist kein Bestandteil
> dieses Extension-Pakets.

## Kontext {#adr-0011-context}

Vaults ADR-039 beschreibt Streaming über einen gepinnten curl-multi-Transfer,
dessen Fortschritt beim Lesen des Responsebodys getrieben wird. `stream=true`
würde dagegen den PHP-Streamhandler auswählen und den Pin verlieren. Die
credentialtragende API kapselt Transport, Promise und Secrets bewusst. \[S05,
S08\]

## Entscheidung {#adr-0011-decision}

Die globale Middleware unterstützt in v1 normale gebufferte Sends und lehnt
Guzzles `stream=true` explizit ab. Das schließt Vaults gesonderte
Streaming-API nicht aus. Deren Adapter verwendet dieselbe
Policy-/ConnectionPlanlogik, erhält aber eine intern kontrollierte Transferlease
für laufenden Fortschritt und Cancellation.

Ein einziger Owner verantwortet Tickschleife, Settlement und Freigabe.
Vorab-Cancellation verhindert den Start; Cancellation im Flug schließt den
aktiven Socket. Body-close, Fehler und abgebrochener Konsum geben Ressourcen
idempotent frei. Fehler nach Teilantworten werden nicht als vollständiger
EOF-Erfolg ausgegeben.

Vault behält Credential-Injection, vorherige Secretberechtigungen, Audit,
Buffergrenzen, Idle-/Gesamtzeitsemantik und die Unterscheidung zwischen Proxy-
und Originantworten in seinen bestehenden Regressionen. Die neue v1-Proxygrenze
wird als explizite Kompatibilitätsänderung behandelt, nicht versteckt. Seine
öffentliche API exportiert weiterhin keine rohen Securityoptionen.

## Verworfene Alternativen {#adr-0011-rejected-alternatives}

**Streaming ganz streichen:** unnötiger Produktverlust. `stream=true` **akzeptieren:** falscher Transport. **Streamingmechanismus neu kopieren:**
vermeidbare Fehler bei EOF, Bufferlimits und Cancellation. **Rohen Client
herausgeben:** vergrößert die credentialtragende Oberfläche.

## Konsequenzen {#adr-0011-consequences}

Die anspruchsvolle Vaultfunktion bleibt erhalten. Die Migration verlangt reale
Streaming-/Cancellationtests und ist nicht allein durch das Austauschen einer
Factory abgeschlossen. Lange Streams bleiben ressourcenbehaftete, explizit zu
beendende Transfers.

## Nachweis und Abnahme {#adr-0011-verification-and-acceptance}

T058, T059, T060, T061, T069, T070, T071, T072. Details und erwartete Ergebnisse
stehen in [06 Tests und Abnahme](https://github.com/netresearch/typo3_http_guard/blob/3f929ae8794ca04ab3dd25627e94d601a2db23e0/specification/specs/06-verification.md). Diese Tests sind spezifiziert, nicht im Rahmen
dieser Dokumentlieferung ausgeführt.

## Anlass für Neubewertung {#adr-0011-reassessment-trigger}

Globales inkrementelles Streaming ist ein späteres Feature. Es muss dieselben
Pins, Lifecycle- und Fehlerverpflichtungen erfüllen, statt nur einen anderen
Guzzle-Schalter freizugeben.

## Zugehörige Dokumente {#adr-0011-related-documents}

[Produktanforderungen](https://github.com/netresearch/typo3_http_guard/blob/3f929ae8794ca04ab3dd25627e94d601a2db23e0/specification/specs/01-product-requirements.md), [Sicherheitsmodell](https://github.com/netresearch/typo3_http_guard/blob/3f929ae8794ca04ab3dd25627e94d601a2db23e0/specification/specs/02-security-model.md), [Architektur](https://github.com/netresearch/typo3_http_guard/blob/3f929ae8794ca04ab3dd25627e94d601a2db23e0/specification/specs/03-architecture.md), [Quellen S01-S23](https://github.com/netresearch/typo3_http_guard/blob/3f929ae8794ca04ab3dd25627e94d601a2db23e0/specification/specs/08-evidence-and-sources.md),
[ADR-Index](https://docs.typo3.org/permalink/netresearch/nr-http-guard:adr-index@0.1.4).
