首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >跨源请求被阻止:相同的原产地策略不允许将python中的远程资源读取到角套接字io。

跨源请求被阻止:相同的原产地策略不允许将python中的远程资源读取到角套接字io。
EN

Stack Overflow用户
提问于 2020-12-31 06:10:56
回答 2查看 1.5K关注 0票数 1

socketio无法从python获取数据到角前端,它将错误显示为"Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://my ip:3000/socket.io/?EIO=3&transport=polling&t=NQtJeHE. (Reason: CORS request did not succeed)“。

代码语言:javascript
复制
while True:
    sio.emit('livedata', {data'})

没有从python进入角,显示了上面的错误

EN

回答 2

Stack Overflow用户

发布于 2020-12-31 14:07:02

默认情况下,python-socketio强制执行同源政策。这意味着如果您的socketio服务器运行在http://myip:5000上,那么它将只接受来自该来源的请求。所以在您的例子中,它阻止来自您的角度前端的请求,因为请求来自http://myip:3000

根据python-socketio文档

如果有必要,可以使用cors_allowed_origins选项来允许其他来源。此参数可以设置为字符串以设置单个允许的来源,也可以设置为允许多个来源的列表。一个特殊的值'*‘可以用来指示服务器允许所有来源,但这应该小心,因为这可能使服务器易受跨站点请求伪造(CSRF)攻击。

如何修复:

使用要允许来自python-socketio的请求的源文件列表初始化您的服务器。在本例中,这是您的角应用程序和python应用程序。使用以下内容(假设您的python服务器在本地运行,端口5000,角在3000):

sio = socketio.Server(cors_allowed_origins=['http://myip:5000', 'http://myip:3000'])

现在应该管用了。

Note:您也可以执行以下操作,但这将接受来自ALL源起的请求,因此要小心,因为它会打开您的CSRF攻击:

sio = socketio.Server(cors_allowed_origins='*')

附加注意事项:如果使用flask-socketio (python-socketioflask-socketio扩展包装器),那么在初始化(或init_app方法)时,只需将相同的cors_allowed_origins参数传递到SocketIO对象。您还需要在您的Flask应用程序上启用CORS --我建议您使用和阅读关于烧瓶扩展的文档--这使得它非常简单。

票数 1
EN

Stack Overflow用户

发布于 2021-01-02 09:01:05

使用异步模式线程进行多处理,而cros用于安全性,则可以使用

cors_allowed_=‘*’

代码语言:javascript
复制
import threading
socketio = SocketIO(app,cors_allowed_origins=['http://pythonserver-ip:port','http://angular-ip:4200'],async_mode='threading')

对于睡眠时间循环,使用以下代码代替time.sleep(2)

代码语言:javascript
复制
socketio.sleep(2)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65517293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档