flask+vue+socketio建立websocket服务,解决跨域问题

项目场景:

使用前后端分离,版本为Flask2.2.3, vue2.6.11,在Flask中使用Flask-SocketIO(5.3.3)建立socket服务,然后vue建立socket连接

问题描述

前后分离使用的是不同的端口, 在通讯时无法建立socket连接,遇到跨域问题

后端报错:

"GET /socket.io/?EIO=4&transport=polling&t=OScMkDs HTTP/1.1" 400

前端报错:
Access to XMLHttpRequest at '***' from origin 'null' has been blocked by CORS policy:No 'Access-Control-Allow-Origin' header is present on the requested resource.


原因分析:

跨域问题可能由后端引起,也可能由前端引起,跨域其实是为了保护网页的安全,避免跨域攻击
在配置好跨域服务后,还要注意版本的问题

本人
Flask-SocketIO5.0的版本对应的 Javascript socket.IO版本为3.x或4.x

flask作为服务解决跨域需要设置 cors_allowed_origins='*'
vue则安装socket.io-client依赖(本人是^4.6.1),然后使用io实例化连接

解决方案:

flask

socketio = SocketIO(app, cors_allowed_origins=‘*’)

vue

npm install socket.io-client --save
在mounted函数中实例化
this.websocket = io(“http://localhost:8086”);
this.websocket.on(‘server_response’, (msg) => {
console.log(‘server_response------>’, msg.data);
})

vue只需要安装socket.io-client即可,不必额外安装vue-socket.io

其它

有的文章在vue的main.js里面建立连接,并试图解决跨域问题

import VueSocketIO from 'vue-socket.io'

Vue.use(new VueSocketIO({
    debug: true,
    connection: "http://localhost:8086",
    options: {
      autoConnect:false
    }
  })
)

对我来说这样无效,而且应该是登录后才建立websocket连接,不建议在main.js中建立连接

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值