Python socket.io服务器错误400(NodeJS服务器正常工作)

Python socket.io服务器错误400(NodeJS服务器正常工作),python,socket.io,Python,Socket.io,我试图通过Apache2代理将JavaScript客户机转换为Python websocket服务器 客户端非常简单: const socket = io({ transports: ['websocket'] }); 我有一个NodeJS websocket服务器和一个正常工作的Apache2反向代理设置 现在我想用Python服务器替换NodeJS服务器——但是socket.io中的示例实现都不起作用。在设置websocket连接时,我的

我试图通过Apache2代理将JavaScript客户机转换为Python websocket服务器

客户端非常简单:

        const socket = io({
          transports: ['websocket']
        });
我有一个NodeJS websocket服务器和一个正常工作的Apache2反向代理设置

现在我想用Python服务器替换NodeJS服务器——但是socket.io中的示例实现都不起作用。在设置websocket连接时,我的每个客户端都会报告一个“错误400”

Python服务器示例如下:

错误400代表“坏请求”-但我知道我的请求是好的,因为我的NodeJS服务器理解它们

如果不在代理后面运行,那么所有Python示例都可以正常工作


可能是什么问题?

我找到了解决方案-我提到的所有Python socket.io服务器示例都没有配置为在反向代理后运行。原因是socket.io服务器正在管理允许的请求源列表,而在反向代理情况下,自动创建列表失败

此函数用于创建允许来源的自动列表(engineio/asyncio_server.py):

如您所见,它只添加以{scheme}作为协议的URL。在反向代理之后,{scheme}将始终是“http”。因此,如果初始请求是基于HTTPS的,它将不在允许的来源列表中

这个问题的解决方案非常简单:在创建socket.io服务器时,您必须告诉他允许所有来源,或者指定您的来源:

import socketio
sio = socketio.AsyncServer(cors_allowed_origins="*") # allow all
# or
sio = socketio.AsyncServer(cors_allowed_origins="https://example.com") # allow specific
import socketio
sio = socketio.AsyncServer(cors_allowed_origins="*") # allow all
# or
sio = socketio.AsyncServer(cors_allowed_origins="https://example.com") # allow specific