From 03fa74abbade359bc9d3fb6c9dcf5344b1c67089 Mon Sep 17 00:00:00 2001 From: StefanMoCoAt Date: Thu, 23 Apr 2026 13:25:02 +0200 Subject: [PATCH] ### fix: verbessere CORS-Handling im Caddy-Proxy MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - **Caddyfile:** Hinzufügen des `defer`-Flags zur korrekten Verarbeitung von CORS-Headern. - **UI:** Aktualisierung des Versionsmarkers auf `v2026-04-23.22 - CADDY DEFER CORS FIX`. - **Docs:** Ergänzung der Analyse und Lösung für Version 22. --- config/docker/caddy/web-app/Caddyfile | 19 ++++++------------- .../03_Journal/2026-04-23_Plan-B-Formulare.md | 7 +++++++ .../frontend/shell/web/WebMainScreen.kt | 2 +- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/config/docker/caddy/web-app/Caddyfile b/config/docker/caddy/web-app/Caddyfile index 65b55538..b3b4dec7 100644 --- a/config/docker/caddy/web-app/Caddyfile +++ b/config/docker/caddy/web-app/Caddyfile @@ -17,27 +17,20 @@ encode gzip zstd - # Reverse Proxy: Plan-B leitet nur /api/mail an den Mail-Service weiter (kein API-Gateway nötig) + # Reverse Proxy: Plan-B leitet nur /api/mail an den Mail-Service weiter handle /api/mail/* { - # CORS Handshake direkt im Proxy abfangen (Plan-B radikal) - @options method OPTIONS - header @options { - Access-Control-Allow-Origin "https://app.mo-code.at" - Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" - Access-Control-Allow-Headers "*" - Access-Control-Allow-Credentials "true" - Access-Control-Max-Age "3600" - } - respond @options 204 - - # CORS Header auch für die eigentlichen Antworten (GET/POST) setzen header { Access-Control-Allow-Origin "https://app.mo-code.at" Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" Access-Control-Allow-Headers "*" Access-Control-Allow-Credentials "true" + Access-Control-Max-Age "3600" + defer } + @options method OPTIONS + respond @options 204 + reverse_proxy mail-service:8085 } diff --git a/docs/03_Journal/2026-04-23_Plan-B-Formulare.md b/docs/03_Journal/2026-04-23_Plan-B-Formulare.md index b84f859f..cd785348 100644 --- a/docs/03_Journal/2026-04-23_Plan-B-Formulare.md +++ b/docs/03_Journal/2026-04-23_Plan-B-Formulare.md @@ -79,3 +79,10 @@ Die "Hallo Du!" Test-UI wurde durch produktive, fachlich korrekte Formulare erse - OPTIONS-Requests werden nun sofort vom Proxy mit `204 No Content` und den korrekten CORS-Headern beantwortet. - Damit wird sichergestellt, dass der Browser die Header erhält, noch bevor die Anfrage das Backend erreicht. - **Status**: Versionsmarker auf v2026-04-23.21 aktualisiert. + +### v2026-04-23.22 - CADDY DEFER CORS FIX +- **Analyse**: Die CORS-Blockade hielt an (v21). Die Fehlermeldung "No 'Access-Control-Allow-Origin' header" blieb bestehen. +- **Lösung**: + - Im `Caddyfile` wurde das `defer`-Flag für die Header-Direktive hinzugefügt. Dies stellt sicher, dass Caddy die CORS-Header erst ganz am Ende der Response-Verarbeitung setzt und sie nicht von anderen Direktiven (wie `reverse_proxy`) überschrieben werden können. + - Radikale Vereinfachung des CORS-Blocks im Caddyfile für maximale Zuverlässigkeit bei Preflight-Anfragen. +- **Status**: Versionsmarker auf v2026-04-23.22 aktualisiert. diff --git a/frontend/shells/meldestelle-web/src/wasmJsMain/kotlin/at/mocode/frontend/shell/web/WebMainScreen.kt b/frontend/shells/meldestelle-web/src/wasmJsMain/kotlin/at/mocode/frontend/shell/web/WebMainScreen.kt index 2027d514..c030e714 100644 --- a/frontend/shells/meldestelle-web/src/wasmJsMain/kotlin/at/mocode/frontend/shell/web/WebMainScreen.kt +++ b/frontend/shells/meldestelle-web/src/wasmJsMain/kotlin/at/mocode/frontend/shell/web/WebMainScreen.kt @@ -124,7 +124,7 @@ fun MainAppContent() { // Dezentraler Versions-Marker in der unteren rechten Ecke Box(modifier = Modifier.fillMaxSize().padding(8.dp), contentAlignment = Alignment.BottomEnd) { Text( - text = "v2026-04-23.21 - CADDY CORS PROXY FIX", + text = "v2026-04-23.22 - CADDY DEFER CORS FIX", style = MaterialTheme.typography.labelSmall, color = Color.LightGray.copy(alpha = 0.5f) )