ERR failed to connect to origin error=”websocket: bad handshake” originURL=https://***
2条回答 默认 最新
关注🕒上午好,题主!目前:🟢[在线] 📢参考GPT-4o mini 模型、由清水白石008整理提供! 📣今日金句:成功是百分之一的灵感,加上百分之九十九的汗水。”** — 托马斯·爱迪生在使用 Cloudflare Tunnel 映射本地端口时,出现
websocket: bad handshake错误,通常与以下几方面相关:常见原因和解决方案
WebSocket 和 SSL 的配置问题
- WebSocket 协议在 HTTPS 上使用
wss://协议(安全的 WebSocket),确保你在通过 HTTPS 使用 WebSocket 时,配置正确。 - 解决方案:
- 确保你在客户端代码中使用
wss://而不是ws://来连接 WebSocket。 - 如果服务器端要求 HTTPS,确保 Cloudflare Tunnel 配置了正确的 SSL 证书,并启用了 TLS 终端。
- 确保你在客户端代码中使用
- WebSocket 协议在 HTTPS 上使用
Cloudflare SSL 设置问题
- Cloudflare 提供了几种 SSL 模式(如 Full、Full (Strict)、Flexible),这些模式控制了 Cloudflare 如何处理 SSL 流量。
- 解决方案:
- 尝试将 SSL 模式设置为 **Full (Strict)**,这确保了 Cloudflare 和你的服务器之间的连接使用有效的 SSL 证书。
- 在 Cloudflare 的仪表板中,进入域名设置 -> SSL/TLS -> SSL 模式,选择合适的模式。
WebSocket 支持未启用
- Cloudflare 默认支持 WebSocket,但需要确保已在你的域名设置中启用 WebSocket 支持。
- 解决方案:
- 确认 Cloudflare 管理控制台的网络设置中,WebSocket 选项已启用:进入 Cloudflare -> 域名 -> 网络,确保 WebSocket 支持已开启。
Origin 服务器问题
- 如果你使用的是本地服务器,确保服务器可以正确处理 WebSocket 请求。该错误可能与服务器端未正确处理 WebSocket 握手有关(如缺少正确的响应头)。
- 解决方案:
- 检查服务器端是否正确处理 WebSocket 握手,特别是 HTTP 101 状态码的返回(表示协议切换成功)。确保服务器上配置的 WebSocket 路由正常工作。
端口映射问题
- 确保本地的端口映射正确,Cloudflare Tunnel 需要将外部流量准确地映射到本地服务器的 WebSocket 端口。
- 解决方案:
- 确认 Cloudflare Tunnel 配置文件(
cloudflared.yml或其他配置文件)中的端口映射是否正确,WebSocket 服务运行在正确的端口上。
- 确认 Cloudflare Tunnel 配置文件(
排查步骤
- 检查日志:查看
cloudflared的运行日志,了解更多关于握手失败的具体原因。 - 检查 WebSocket 服务:使用
curl或其他工具,直接连接到本地 WebSocket 服务,确保 WebSocket 服务在本地正常工作。 - 查看 Cloudflare 错误日志:检查 Cloudflare 后台是否显示了更多关于该问题的错误信息,可能会提供具体的调试线索。
通过这些步骤,你可以逐步解决 Cloudflare Tunnel 通过 WebSocket 时遇到的
bad handshake错误。如果问题依然存在,可以进一步分享具体的配置文件和日志,以便更详细的排查。解决评论 打赏 举报无用 1