尝试升级到WebSocket协议时,我收到HTTP 400:错误请求。
在客户端上,我通过以下方式初始化套接字(传输仅用于测试,因此不会浪费轮询时间-顺便说一下)
export const socket = io('/my-namespace', { transports: ['websocket'] });
在服务器上:
app = Flask(__name__)
socketio = SocketIO()
socketio.init_app(app)
socketio.on_namespace(MyClass('/my-namespace'))
class MyClass(Namespace):
def __init__(self, namespace):
Namespace.__init__(self, namespace)
...
Apache配置:
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/socket.io/ [NC]
RewriteCond %{QUERY_STRING} transport=websocket [NC]
RewriteRule ^/socket.io/(.*) ws://localhost:3000/socket.io/$1 [P,L]
ProxyPass /socket.io/ http://localhost:3000/socket.io/
ProxyPassReverse /socket.io/ http://localhost:3000/socket.io/
在python调试时,我收到如下消息:
135.247.26.208,127.0.0.1 - - [29/Oct/2019 11:26:41] "GET /socket.io/?EIO=3&transport=websocket HTTP/1.1" 400 122 0.000338
因此,很明显,代理正在按预期工作。当我直接连接到flask应用程序时,websockets可以正常工作。知道这可能是什么原因吗?