У меня есть приложение с веб-сокет-соединением между бэкэндом Spring и Angular Frontend за Spring Cloud Gateway, которое отлично работает через http / ws, но не работает вообще.
Что я пробовал и что сработало:
- запуск angular фронтэнда и пружинного бэкенда напрямую
- запуск angular фронтэнда и пружинного бэкэнда локально с docker за локальным шлюзом весенних облаков
- предоставление порта непосредственно в бэкэнд-контейнере docker (испускающий шлюз, который использует ssl на сервере) и запуск внешнего интерфейса angular локально для этого бэкэнда (с angular proxy)
Что не работает:
- запуск сервера с контейнером docker и использование веб-сокета с https / wss
Я настроил весеннее облако шлюз, как описано здесь https://cloud.spring.io/spring-cloud-gateway/reference/html/:
- id: websocketinfo
uri: http://app
predicates:
- Host=app.domain.com
- Path=/api/ws/info/**
- id: websocket
uri: ws://app
predicates:
- Host=app.domain.com
- Path=/api/ws/**
Единственное отличие между моим локальным шлюзом (с которым работает связь через веб-сокет) и сервером шлюз в том, что у меня на сервере включен ssl с ключом p12
Сообщение об ошибке, которое я получаю в облачном шлюзе Spring:
io.netty.handler.codec.http.websocketx.WebSocketHandshakeException: Invalid handshake response getStatus: 403
В бэкэнд-сервисе Spring я получаю эти много ошибок:
2020-04-09 07:03:55.298 WARN 1 --- [p-nio-80-exec-4] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotWritableException: No converter for [class java.util.LinkedHashMap] with preset Content-Type 'application/javascript;charset=UTF-8']
Это меня очень смущает, так как это похоже на ошибку, которая должна произойти независимо от того, в какой среде вы запускаете приложение в