项目复盘: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;
  }
}
相关推荐
AI+程序员在路上21 分钟前
CANopen 协议:介绍、调试命令与应用
linux·c语言·开发语言·网络
江畔何人初23 分钟前
kube-apiserver、kube-proxy、Calico 关系
运维·服务器·网络·云原生·kubernetes
网安Ruler1 小时前
UDS 协议分析及模拟测试
网络
weiwx832 小时前
Nginx location 和 proxy_pass 配置详解
服务器·网络·nginx
带娃的IT创业者3 小时前
WeClaw 日志分析实战:如何从海量日志中快速定位根因?
运维·python·websocket·jenkins·fastapi·架构设计·实时通信
互成5 小时前
加密系统哪款最好用?2026年五款加密系统深度对比测评
运维·网络·安全
mftang5 小时前
WebSocket 通信协议详细解析
网络·websocket·网络协议
野指针YZZ5 小时前
TCP包 wireshark抓包分析-RK3588
网络·tcp/ip·wireshark
纽创信安5 小时前
纽创信安与SGS启动网络安全ISO 21434认证项目
网络·安全·web安全
MinterFusion6 小时前
如何在开放麒麟(openKylin)下安装FTP服务器(v0.1.0)
运维·服务器·网络·vsftpd·开放麒麟·明德融创·openkylin