项目复盘:websocket不受跨域限制的原理

主要还是因为:

1、WebSocket 是独立于 HTTP 的应用层协议,通过 HTTP 建立连接后,完全脱离 HTTP 语义约束。这意味着

  • 不受 HTTP 同源策略限制

  • 不需要预检请求

  • 不依赖 CORS 头机制

2、建立连接时的握手请求仍使用 HTTP 格式,但具有特殊标记:

类似于下述代码,当浏览器发起 WebSocket 连接时,会自动将当前网页的源(协议+域名+端口)填入 Origin 请求头。内部实现了跨域

javascript 复制代码
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Origin: https://client.example.com  // 关键跨域标识
Sec-WebSocket-Version: 13

注:虽然目前服务端不做白名单校验也能成功,但为了安全还是要做一下di~

服务端可以用下列代码进行验证以防恶意操作

javascript 复制代码
wss.on('connection', (ws, req) => {
// 进行白名单校验
  const allowedOrigins = ['https://myapp.com', 'https://admin.myapp.com'];
  if (!allowedOrigins.includes(req.headers.origin)) {
    ws.close(1008, 'Invalid origin'); // 关闭非法来源连接
    return;
  }
}
相关推荐
s_little_monster8 分钟前
【Linux】socket网络编程之TCP
linux·运维·网络·笔记·学习·tcp/ip·学习方法
煤灰24223 分钟前
Linux上的网络编程-初探
linux·网络
啊QQQQQ1 小时前
网络IP分片
网络·网络协议·tcp/ip
✿ ༺ ོIT技术༻1 小时前
Linux:深入理解网络层
运维·服务器·网络
程序员与背包客_CoderZ1 小时前
自动驾驶技术栈——DoIP通信协议
网络协议·计算机网络·车载系统·自动驾驶
zhangzuying10262 小时前
在uni-app中实现类似文心一言的流式对话功能:从fetch到websocket的实践
websocket·uni-app·文心一言
网络空间小黑2 小时前
WEB渗透测试----信息收集
服务器·前端·网络·安全·web安全·网络安全
CTI数字化服务2 小时前
国产密码新时代!华测国密 SSL 证书解锁安全新高度
网络协议·安全·ssl
航Hang*3 小时前
实战项目3(04)
网络·计算机网络·ensp
ax一号街阿楠3 小时前
华为FAT AP配置 真机
网络·华为·智能路由器