当前位置: 首页 > article >正文

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

主要还是因为:

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

  • 不受 HTTP 同源策略限制

  • 不需要预检请求

  • 不依赖 CORS 头机制

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

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

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~

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

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;
  }
}


http://www.kler.cn/a/613675.html

相关文章:

  • 原型模式为什么可以解决构建复杂对象的资源消耗问题
  • 如何将Spring Boot项目与DeepSeek AI集成并优化为AI系统
  • 为什么要将项目部署到外部tomcat
  • Tracking Area Code(跟踪区码)
  • 【NLP 46、大模型技术发展】
  • 对于后端已经实现逻辑了,而前端还没有设置显示的改造
  • 抽象代数:群论
  • Apache HttpClient使用
  • SpringMVC——数据传递的多种方式
  • 数据库三级填空+应用(2)
  • 开源模型应用落地-语音转文本-whisper模型-AIGC应用探索(四)
  • 记一次线上环境JAR冲突导致程序报错org.springframework.web.util.NestedServletException
  • 【学Rust写CAD】13 图像结构体(Image.rs)
  • 卷积神经网络在图像分割中的应用:原理、方法与进展介绍
  • OpenHarmony子系统开发 - init启动引导组件(三)
  • vue3使用video.js播放m3u8格式视频
  • 文件上传绕过的小点总结(10)
  • AI 代理框架:组件及前五开源解决方案
  • Flask项目部署:Flask + uWSGI + Nginx
  • [异步监听事件、异步绑定属性]通过vue的this.$refs.组件.$props和.$on实现异步绑定组件属性和事件监听