spring - 如何从 WSS 重定向到 WS?
问题描述
早上好,
我有以下情况:
Angular + SockJS <-(wss)-> WW.XX.YY.ZZ (Apache) <-(ws)-> AA.BB.CC.DD (Spring Boot Server)
我有一个 Spring Boot 服务器 (AA.BB.CC.DD),我想通过安全端点 (WW.XX.YY.ZZ) 代理所有请求,但是当我访问 Angular 应用程序时,我可以在谷歌浏览器开发者工具如下消息:
WebSocket connection to 'wss://WW.XX.YY.ZZ/messages/websocket' failed: Error during WebSocket handshake: Unexpected response code: 403
在我的Spring Boot 应用程序日志中,我可以看到以下内容:
o.s.w.s.s.s.DefaultHandshakeHandler : Handshake failed due to invalid Upgrade header: nul
角度配置如下:
export const stompConfig: InjectableRxStompConfig = {
brokerURL: 'wss://WW.XX.YY.ZZ/messages/websocket',
// ...
}
Spring Boot 配置如下:
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.setApplicationDestinationPrefixes("/app");
config.enableSimpleBroker("/queue", "/user");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/messages").setAllowedOrigins("*").withSockJS();
}
Apache 配置如下:
RewriteEngine On
ProxyRequests Off
ProxyPreserveHost On
<Location /messages/>
ProxyPass ws://AA.BB.CC.DD:8080/messages/
ProxyPassReverse ws://AA.BB.CC.DD:8080/messages/
</Location>
<Location / >
ProxyPass http://AA.BB.CC.DD:8080/
ProxyPassReverse http://AA.BB.CC.DD:8080/
</Location>
我测试了以下几点:
- 此问题的其他 Stackoverflow 答案对我不起作用
- 从常见请求(https -> http)重定向工作正常
- 使用此工具与最终端点(ws://AA.BB.CC.DD:8080/messages/websocket)连接工作正常。
- ws://AA.BB.CC.DD:8080/messages/websocket 正在本地主机上工作,用于开发目的。
我尝试了在 Stackoverflow 上找到的其他解决方案,但没有成功。
解决方案
推荐阅读
- javascript - 带有隐藏 div 的 HTML 损坏格式
- python - 如何模拟使用别名导入的函数?
- python - 列/索引的熊猫样式 set_table_styles 不适用于 to_excel
- html - CSS类不应用样式
- node.js - 运行 docker 容器时未找到 npm 命令错误
- python - 使用来自 2 个数据框的列制作箱线图 [python seaborn]
- c - 检查字符串是否包含特定数量的给定值
- python - 如何聚合熊猫数据框中的行
- android - 读取 Android 手机的实际 txPower
- parse-platform - 如果不存在,则解析模式添加字段