### fix: implementiere Same-Origin-Strategie zur Umgehung von CORS
All checks were successful
All checks were successful
- **PlatformConfig.wasmJs.kt:** API-URLs auf relative Pfade (`/api`) geändert. - **Caddyfile:** `/api/*` Anfragen intern weitergeleitet, `/api` Präfix entfernt. Header angepasst. - **UI:** Versionsmarker auf `v2026-04-23.27 - SAME-ORIGIN PROXY` aktualisiert. - **Docs:** Analyse und Lösung zur neuen Strategie hinzugefügt.
This commit is contained in:
parent
277254ebbd
commit
251647a6ab
|
|
@ -17,29 +17,18 @@
|
|||
|
||||
encode gzip zstd
|
||||
|
||||
# CORS-Handshaking direkt im Proxy
|
||||
# Wir erlauben ALLES für die Domain mo-code.at im Plan-B Modus
|
||||
handle /api/mail/* {
|
||||
@options method OPTIONS
|
||||
handle @options {
|
||||
header {
|
||||
Access-Control-Allow-Origin "*"
|
||||
Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS"
|
||||
Access-Control-Allow-Headers "*"
|
||||
Access-Control-Expose-Headers "*"
|
||||
Access-Control-Max-Age "3600"
|
||||
X-Caddy-CORS "preflight-v26"
|
||||
}
|
||||
respond "" 204
|
||||
}
|
||||
# Same-Origin Strategy: Alle /api/* Anfragen werden intern an den Mail-Service weitergeleitet
|
||||
# Dadurch sieht der Browser nur noch app.mo-code.at und CORS wird hinfällig.
|
||||
handle /api/* {
|
||||
# Wir entfernen das /api Präfix bevor wir es an den Service weitergeben
|
||||
uri strip_prefix /api
|
||||
|
||||
# CORS Header zur Sicherheit trotzdem mitsenden (Nuclear Option v3)
|
||||
header {
|
||||
Access-Control-Allow-Origin "*"
|
||||
Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS"
|
||||
Access-Control-Allow-Headers "*"
|
||||
Access-Control-Expose-Headers "*"
|
||||
X-Caddy-CORS "forward-v26"
|
||||
defer
|
||||
X-Caddy-Strategy "same-origin-v27"
|
||||
}
|
||||
|
||||
reverse_proxy mail-service:8085
|
||||
|
|
|
|||
|
|
@ -101,9 +101,11 @@ Die "Hallo Du!" Test-UI wurde durch produktive, fachlich korrekte Formulare erse
|
|||
- Entfernung von `*` aus den Allowed-Headers, um maximale Kompatibilität mit restriktiven Browsern sicherzustellen.
|
||||
- **Status**: Versionsmarker auf v2026-04-23.24 aktualisiert.
|
||||
|
||||
### v2026-04-23.25 - CADDY CATCH-ALL CORS
|
||||
- **Problem**: Preflight (OPTIONS) weiterhin blockiert (v24). Wahrscheinlich waren die Header-Beschränkungen in v24 immer noch zu strikt für den Ktor/Wasm Client.
|
||||
- **Lösung**:
|
||||
- `Caddyfile` radikal gelockert: `Access-Control-Allow-Headers` auf `*` gesetzt.
|
||||
- CORS-Identifikatoren auf `-v25` aktualisiert, um sicherzugehen, dass der frische Proxy-Stand aktiv ist.
|
||||
- **Status**: Versionsmarker auf v2026-04-23.25 aktualisiert. Finaler Versuch vor der Deadline.
|
||||
### v2026-04-23.27 - SAME-ORIGIN PROXY (THE "NO-CORS" STRATEGY)
|
||||
- **Problem**: Trotz 26 Versuchen, CORS via Headers (Caddy/Spring) zu lösen, blockierten Browser/Proxies weiterhin die Preflight-Anfragen (OPTIONS).
|
||||
- **Analyse**: Wenn der Browser `app.mo-code.at` (Frontend) und `api.mo-code.at` (Backend) sieht, greift die Same-Origin-Policy. In einigen Netzwerk-Konstellationen (Firewalls/Restriktive Browser) schlägt CORS trotz korrekter Header fehl.
|
||||
- **Lösung (Radikalschlag)**:
|
||||
- **Frontend (`PlatformConfig.wasmJs.kt`)**: API-URLs von absolut (`https://api.mo-code.at`) auf relativ (`/api`) umgestellt.
|
||||
- **Caddy Proxy (`Caddyfile`)**: Ein neuer Handle für `/api/*` leitet alle Anfragen intern (Docker-intern) an `mail-service:8085` weiter und entfernt das `/api` Präfix.
|
||||
- **Ergebnis**: Für den Browser finden alle Anfragen auf `app.mo-code.at` statt. Es gibt keine "Cross-Origin" Grenze mehr, CORS-Header werden vom Browser gar nicht mehr geprüft.
|
||||
- **Status**: Versionsmarker auf v2026-04-23.27 aktualisiert. Dies ist die stabilste Architektur für Web-Apps.
|
||||
|
|
|
|||
|
|
@ -7,8 +7,8 @@ package at.mocode.frontend.core.network
|
|||
@Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING")
|
||||
actual object PlatformConfig {
|
||||
actual fun resolveMailServiceUrl(): String {
|
||||
// FORCE HTTPS for Plan-B Weekend
|
||||
return "https://api.mo-code.at"
|
||||
// SAME-ORIGIN Strategy: Use relative path to bypass CORS
|
||||
return "/api"
|
||||
}
|
||||
|
||||
actual fun resolveKeycloakUrl(): String {
|
||||
|
|
@ -20,8 +20,8 @@ actual object PlatformConfig {
|
|||
}
|
||||
|
||||
actual fun resolveApiBaseUrl(): String {
|
||||
// FORCE HTTPS for Plan-B Weekend
|
||||
return "https://api.mo-code.at"
|
||||
// SAME-ORIGIN Strategy: Use relative path to bypass CORS
|
||||
return "/api"
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -126,7 +126,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.26 - NUCLEAR CORS v2",
|
||||
text = "v2026-04-23.27 - SAME-ORIGIN PROXY",
|
||||
style = MaterialTheme.typography.labelSmall,
|
||||
color = Color.LightGray.copy(alpha = 0.5f)
|
||||
)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user