项目复盘: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;
  }
}
相关推荐
HelloWorld工程师19 分钟前
新手如何快速申请SSL通配符证书...
网络协议·https·ssl
fei_sun4 小时前
开放最短路径优先OSPF----基于链路状态
网络
精明的身影5 小时前
网络计划WebApp求解:融合Python与AI决策的项目管理系统
网络·python·web app
姚不倒5 小时前
F5 SSL Profile 证书卸载深入篇
运维·网络协议·负载均衡·ssl·f5
Let's Chat Coding6 小时前
对称密钥认证:主机和设备共享同一把密钥
运维·服务器·网络
技术不好的崎鸣同学8 小时前
[极客大挑战 2019]EasySQL 思路及解法
网络·安全·web安全
Web极客码8 小时前
跨国网络抖动下的 AI 爬虫流调优:我如何用 Claude 打造“智能退避”资讯清洗管道
网络·人工智能·爬虫
念何架构之路9 小时前
moby-http-api-server
网络·网络协议·http
namexingyun9 小时前
Scaling Law bug实战启示:从“虚胖“到“精瘦“的算力效率革命
开发语言·网络·人工智能·bug·ai编程
阿拉斯攀登9 小时前
NAT 穿透详解:STUN / TURN / ICE
运维·服务器·网络·webrtc·nat