Loopback als Vorgabe, verständliche Meldung bei Mixed Content

Die feste Adresse 192.168.180.135 der SwyxTray-App wird überall durch
127.0.0.1 ersetzt: Die App läuft auf dem Arbeitsplatz des Anwenders, die
Verbindung bleibt damit auf dem Rechner und braucht keine Firewall-Freigabe.

Scheitert der Verbindungsaufbau, weil eine über HTTPS ausgelieferte Seite
kein unverschlüsseltes ws:// öffnen darf, meldet der Browser nur "The
operation is insecure." – describeConnectFailure() benennt stattdessen den
Grund und den Ausweg (wss:// oder Loopback).

node_modules/ wird nun auf jeder Ebene ignoriert, nicht nur unter frontend/.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-24 17:16:41 +02:00
co-authored by Claude Opus 5
parent 01594a1f3d
commit 521ceb044b
10 changed files with 60 additions and 16 deletions
+9 -7
View File
@@ -1,7 +1,7 @@
# SwyxWeb
React-Frontend mit Spring-Boot-Backend. Die Startseite verbindet sich **aus dem Browser heraus**
per WebSocket mit der **SwyxTray-App** (`ws://192.168.180.135:17654/ws`), meldet eingehende
per WebSocket mit der **SwyxTray-App** (`ws://127.0.0.1:17654/ws`), meldet eingehende
Anrufe und startet ausgehende Anrufe.
```
@@ -25,7 +25,7 @@ Das Backend baut **keine** eigene WebSocket-Verbindung auf; es hat zwei Aufgaben
`mock`**; im Normalbetrieb und damit auch im Container gibt es ihn nicht.
**Zwei getrennte Ports:** `8080` ist der Port dieser Anwendung (REST-API und, mit Profil `mock`, der Mock),
`17654` der Port der SwyxTray-App auf 192.168.180.135. Sie sind unabhängig voneinander.
`17654` der Port der SwyxTray-App auf dem Arbeitsplatz des Anwenders. Sie sind unabhängig voneinander.
## Protokoll der SwyxTray-App
@@ -488,14 +488,14 @@ Es gilt die erste Quelle, die etwas liefert:
| 1 | Eingabefeld auf der Startseite | zur Laufzeit änderbar |
| 2 | `GET /api/config` vom Backend | `app.websocket.host` in `application.properties` |
| 3 | `VITE_WS_URL` aus `frontend/.env` | siehe [.env.example](frontend/.env.example) |
| 4 | Default im Code | `ws://192.168.180.135:17654/ws` |
| 4 | Default im Code | `ws://127.0.0.1:17654/ws` |
Backend-seitig:
```properties
server.port=8080 # Port dieser Anwendung
app.websocket.host=192.168.180.135 # SwyxTray-App
app.websocket.host=127.0.0.1 # SwyxTray-App
app.websocket.port=17654
app.websocket.path=/ws
app.websocket.secure=false # true ⇒ wss://
@@ -522,7 +522,7 @@ als `root`, mit einem Healthcheck gegen `/api/config`.
```bash
docker build -t swyxweb .
docker run -d -p 8080:8080 \
-e APP_WEBSOCKET_HOST=192.168.180.135 \
-e APP_WEBSOCKET_HOST=127.0.0.1 \
-e APP_WEBSOCKET_PORT=17654 \
--name swyxweb swyxweb
```
@@ -571,7 +571,9 @@ Zwei Dinge, die der Container nicht lösen kann:
Vite-Dev-Server auf Port 5173 sich verbinden kann. Für die Produktion einschränken siehe
[WebSocketConfig.java](backend/src/main/java/de/appcreation/swyxweb/config/WebSocketConfig.java)
und [CorsConfig.java](backend/src/main/java/de/appcreation/swyxweb/config/CorsConfig.java).
- **Firewall**: Port 17654 muss auf 192.168.180.135 eingehend freigegeben sein, sonst
scheitert der Verbindungsaufbau ohne aussagekräftige Browser-Fehlermeldung.
- **Firewall**: Die Verbindung geht per Vorgabe an `127.0.0.1`, bleibt also auf dem Rechner
und braucht keine Freigabe. Zeigt die Adresse auf einen anderen Rechner, muss dort Port
17654 eingehend freigegeben sein sonst scheitert der Verbindungsaufbau ohne
aussagekräftige Browser-Fehlermeldung.
- **System-Benachrichtigungen** verlangen eine Benutzerinteraktion zur Erlaubniserteilung und
funktionieren nur über `https://` oder `localhost`.