Flask SocketIO:WebSocket 握手期间出错
Flask SocketIO: Error during WebSocket handshake
我正在尝试使用 Flask-SocketIO 建立 websocket 通信,但我一直在浏览器的控制台中收到 "Error during WebSocket handshake: Unexpected response code: 400"。
我在 Raspbian OS.
上使用 Chromium 浏览器
我安装了eventlet。
这里是myapp.py的代码:
from flask import Flask, jsonify, request, render_template
from flask_socketio import SocketIO, emit
import eventlet
eventlet.monkey_patch()
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
io = SocketIO(app)
clients = []
@app.route('/')
def index():
return render_template('index2.html')
@io.on('connected')
def connected():
clients.append(request.sid)
print("client connected")
print(request.sid)
@io.on('disconnect')
def disconnect():
clients.remove(request.sid)
print("client disconnected")
print(request.sid)
if __name__ == '__main__':
io.run(app, host='localhost', port=5000)
这是index2.html:
<html>
<br>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/socket.io/2.2.0/socket.io.js" integrity="sha256-yr4fRk/GU1ehYJPAs8P4JlTgu0Hdsp4ZKrx8bDEDC3I=" crossorigin="anonymous"></script>
</head>
<br>
<body>
<h2>HELLO</h2>
<script>
$("document").ready(function(){
var socket = io.connect('http://localhost:5000');
socket.on('connect', function() {
socket.emit('connected');
});
});
</script>
</body>
</html>
我运行有命令的应用程序
python myapp.py
当我导航到 http://localhost:5000 时,我可以在网页上看到 "HELLO",但我没有收到 "client connected" 消息,在浏览器的控制台中,有错误消息"Error during WebSocket handshake: Unexpected response code: 400".
有人知道哪里出了问题吗?
由于某种原因,服务器正在拒绝连接。您可以做的是在服务器中启用详细日志记录:
io = SocketIO(app, engineio_logger=True, logger=True)
然后每次出现 400 错误时,您都会看到有关该错误的一些附加信息。
这些 400 的一个很可能的原因是失败的跨源验证。这不是唯一可能的原因,最常见于 Web 浏览器客户端。如果是这种情况,您需要将 cors_allowed_origins
选项添加到您的 Socket.IO 服务器。
我正在尝试使用 Flask-SocketIO 建立 websocket 通信,但我一直在浏览器的控制台中收到 "Error during WebSocket handshake: Unexpected response code: 400"。
我在 Raspbian OS.
上使用 Chromium 浏览器我安装了eventlet。
这里是myapp.py的代码:
from flask import Flask, jsonify, request, render_template
from flask_socketio import SocketIO, emit
import eventlet
eventlet.monkey_patch()
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
io = SocketIO(app)
clients = []
@app.route('/')
def index():
return render_template('index2.html')
@io.on('connected')
def connected():
clients.append(request.sid)
print("client connected")
print(request.sid)
@io.on('disconnect')
def disconnect():
clients.remove(request.sid)
print("client disconnected")
print(request.sid)
if __name__ == '__main__':
io.run(app, host='localhost', port=5000)
这是index2.html:
<html>
<br>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/socket.io/2.2.0/socket.io.js" integrity="sha256-yr4fRk/GU1ehYJPAs8P4JlTgu0Hdsp4ZKrx8bDEDC3I=" crossorigin="anonymous"></script>
</head>
<br>
<body>
<h2>HELLO</h2>
<script>
$("document").ready(function(){
var socket = io.connect('http://localhost:5000');
socket.on('connect', function() {
socket.emit('connected');
});
});
</script>
</body>
</html>
我运行有命令的应用程序
python myapp.py
当我导航到 http://localhost:5000 时,我可以在网页上看到 "HELLO",但我没有收到 "client connected" 消息,在浏览器的控制台中,有错误消息"Error during WebSocket handshake: Unexpected response code: 400".
有人知道哪里出了问题吗?
由于某种原因,服务器正在拒绝连接。您可以做的是在服务器中启用详细日志记录:
io = SocketIO(app, engineio_logger=True, logger=True)
然后每次出现 400 错误时,您都会看到有关该错误的一些附加信息。
这些 400 的一个很可能的原因是失败的跨源验证。这不是唯一可能的原因,最常见于 Web 浏览器客户端。如果是这种情况,您需要将 cors_allowed_origins
选项添加到您的 Socket.IO 服务器。