【发布时间】:2020-07-21 18:43:58
【问题描述】:
我有一个应用程序,在 Spring Cloud Gateway 后面的 Spring 后端和 Angular 前端之间有一个 websocket 连接,它可以通过 http / ws 完美运行,但根本不起作用。
我尝试了什么,什么有效:
- 直接启动angular前端和spring后端
- 使用本地 spring 云网关后面的 docker 在本地启动 angular 前端和 spring 后端
- 直接在后端 docker 容器上公开一个端口(发出在服务器上使用 ssl 的网关)并针对该后端在本地启动 Angular 前端(使用 Angular 代理)
什么不起作用:
- 使用 docker 容器启动后端并将 websocket 与 https/wss 一起使用
我按照这里https://cloud.spring.io/spring-cloud-gateway/reference/html/的描述配置了spring cloud gateway:
- 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/**
我的本地网关(使用 websocket 通信)和服务器网关之间的唯一区别是我在服务器上使用 p12 密钥启用了 ssl
我在spring cloud gateway中得到的错误信息是:
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']
这让我很困惑,因为无论您在哪个环境中运行应用程序,这似乎都是应该发生的错误
【问题讨论】:
标签: angular spring sockets stomp sockjs