Files
xiaomubiao-master/WEBSOCKET_403_SOLUTION.md
2026-05-22 16:13:20 +08:00

140 lines
3.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# WebSocket 403错误解决方案
## 🚨 问题描述
```
WebSocket connection to 'ws://localhost:3003/dji/api/v1/ws?x-auth-token=' failed:
Error during WebSocket handshake: Unexpected response code: 403
```
## 🔍 原因分析
403错误通常表示认证失败主要原因包括
1. **Token缺失**: localStorage中没有有效的认证token
2. **Token过期**: 存储的token已经过期
3. **Token格式错误**: token格式不正确或损坏
4. **服务器配置**: 服务器端认证配置问题
## ✅ 解决步骤
### 1. 使用调试工具诊断
在浏览器控制台运行:
```javascript
debugWebSocketToken()
```
### 2. 检查Token状态
调试工具会显示:
- ✅ 所有localStorage中的token
- 🔍 当前使用的token信息
- ⏰ JWT token的过期时间
- 💡 针对性的修复建议
### 3. 根据诊断结果修复
#### 情况1: 没有Token
```javascript
// 解决方案:重新登录系统
// 或手动设置测试token仅用于测试
localStorage.setItem('x-auth-token', 'your-valid-token-here')
```
#### 情况2: Token已过期
```javascript
// 解决方案重新登录获取新token
// 或清除过期token后重新登录
localStorage.removeItem('x-auth-token')
// 然后重新登录
```
#### 情况3: Token存在但连接失败
```javascript
// 尝试重新连接
dualWebSocketManager.reconnectPrimary()
```
### 4. 验证修复结果
```javascript
// 测试连接
dualWebSocketManager.getConnectionStatus()
```
## 🛠️ 可用的调试命令
### 基本诊断
```javascript
debugWebSocketToken() // 诊断token状态
```
### 连接管理
```javascript
dualWebSocketManager.reconnectPrimary() // 重连主WebSocket
dualWebSocketManager.getConnectionStatus() // 查看连接状态
```
### Token管理谨慎使用
```javascript
// 查看当前token
localStorage.getItem('x-auth-token')
// 设置测试token仅用于测试
localStorage.setItem('x-auth-token', 'test-token')
// 清除token
localStorage.removeItem('x-auth-token')
```
## 🔧 预防措施
### 1. 自动Token刷新
系统应实现token自动刷新机制在token即将过期时自动获取新token。
### 2. 连接状态监控
```javascript
// 监听连接状态变化
EventBus.on('WebSocket-ConnectionError', (error) => {
if (error.code === 403) {
// 处理认证失败
console.log('认证失败,请重新登录')
}
})
```
### 3. 优雅降级
当WebSocket连接失败时系统应提供适当的用户提示和替代方案。
## 📋 常见问题
### Q: 为什么token存在但仍然403
A: 可能原因:
- Token已过期
- Token格式不正确
- 服务器端认证配置变更
- 网络环境问题
### Q: 如何获取有效的token
A:
1. 通过正常的登录流程
2. 检查登录接口的响应
3. 确保token正确存储到localStorage
### Q: 开发环境下如何测试?
A:
1. 使用调试工具诊断
2. 手动设置测试token
3. 监控WebSocket连接日志
## 🚀 最佳实践
1. **定期检查Token**: 实现定时检查token有效性
2. **错误处理**: 完善的WebSocket错误处理机制
3. **用户体验**: 提供清晰的错误提示和解决建议
4. **日志记录**: 详细的连接和认证日志
5. **监控告警**: 连接失败时的监控和告警机制
## 📞 技术支持
如果上述方法无法解决问题,请:
1. 收集完整的错误日志
2. 提供token诊断结果
3. 检查网络环境和服务器状态
4. 联系系统管理员进行服务器端排查