Bereich: HTTP-Runtime
Dieser Bereich dokumentiert die stabile Betriebsbasis des HTTP-Runtime-Pfads. Er hält fest, welche Dateibereiche, Locking-Strategien und Schreibmuster dauerhaft gelten — unabhängig vom jeweiligen Sprint.
Preview-relevante Runtime-Bausteine
var/config/config.phpist die kompilierte Runtime-Config und bleibt die einzige Laufzeitquelle für den HTTP-Pfad.var/tmp/captchaträgt kurzlebige CAPTCHA-Challenges.var/tmp/ratelimitträgt die Rate-Limit-Zustände für den Kontaktpfad.var/state/tokenshält den wichtigeren langlebigen Zustand für Token-Listen.
Guardrails für den Kontaktpfad
IP_SALTist Pflichtwert der Runtime-Config und stabilisiert die Hash-Bildung für Rate-Limit und CAPTCHA.- Der GET-Pfad des Kontaktformulars begrenzt CAPTCHA-Abrufe über
CAPTCHA_MAX_GETundRATE_LIMIT_WINDOW_SECONDS. - Der POST-Pfad begrenzt Formularversuche über
CONTACT_MAX_POSTim selben Zeitfenster. - Fehlerhafte CAPTCHA- oder Mail-Läufe geben kontrolliert Fehlerseiten oder Wiederholpfade zurück, statt stillen Zustand zu hinterlassen.
Atomare Schreibmuster
- Laufzeitzustand wird dateibasiert gehalten.
- Schreibvorgänge laufen über Temp-Dateien mit anschließendem
rename(). - Damit bleibt entweder der alte oder der neue Zustand sichtbar; halbfertige Dateien sollen im aktiven Pfad nicht öffentlich wirksam werden.
Locking
Alle zustandsverändernden Dateizugriffe im HTTP-Pfad laufen unter einem
symfony/lock-basierten FlockStore-Lock über RuntimeLockRunner.
Lock-Keys je Dienst
| Dienst | Lock-Key-Schema | Granularität |
|---|---|---|
RateLimiter |
ratelimit_{normalized_key} |
pro IP-Schlüssel |
CaptchaService |
captcha_{challenge_id} |
pro Challenge-ID |
TokenService (Schreiben) |
token_{normalized_profile} |
pro Profil |
TokenService (Lesen) |
— (kein Lock) | lock-frei |
Timeout- und Polling-Regel
- Maximale Wartezeit: 300 ms
- Polling-Intervall: 25 ms
- Bei Überschreitung:
RuntimeException("Lock-Timeout nach 300ms: {key}") - Die Werte sind Standardwerte in
RuntimeLockRunner; sie lassen sich im Konstruktor überschreiben.
Race-Test-Nachweis
Der ConcurrencyTest belegt, dass jeder Schreibpfad tatsächlich unter
dem erwarteten Lock-Key läuft und der Timeout greift, wenn der Key belegt
ist. Hintergrund und Ergebnis:
16-3: Race-nahe Tests.