python-socketio
默认情况下执行同源策略。这意味着如果您的 socketio 服务器正在运行http://myip:5000
,那么它将只接受来自该来源的请求。因此,在您的情况下,它会阻止来自您的角度前端的请求,因为请求来自http://myip:3000
根据python-socketio 文档:
如有必要,可使用 cors_allowed_origins 选项来允许其他来源。此参数可以设置为字符串以设置单个允许的来源,或设置为列表以允许多个来源。'*' 的特殊值可用于指示服务器允许所有来源,但应谨慎执行,因为这可能使服务器容易受到跨站点请求伪造 (CSRF) 攻击。
怎么修:
python-socketio
使用您希望允许来自的请求的来源列表初始化您的服务器。在这种情况下,这就是您的 Angular 应用程序和您的 python 应用程序。使用类似下面的东西(假设你的 python 服务器在本地端口 5000 上运行,角度在 3000 上):
sio = socketio.Server(cors_allowed_origins=['http://myip:5000', 'http://myip:3000'])
它现在应该可以工作了。
注意:您也可以执行以下操作,但这将接受来自所有来源的请求,因此请小心,因为它可能会使您面临 CSRF 攻击:
sio = socketio.Server(cors_allowed_origins='*')
附加说明:如果您正在使用flask-socketio
(的 Flask 扩展包装器python-socketio
),只需在初始化(或方法)cors_allowed_origins
参数传递给您还需要在您的 Flask 应用程序上启用 CORS - 我建议使用和阅读有关Flask-CORS扩展的文档 - 这使得它非常简单。SocketIO
init_app