I use flutter and tokens from flutter contain 'upgrade: websocket', not "Upgrade: websocket".
I do not know who is right but it is a problem.
def _opening_handshake(self, client, data):
...
if "Upgrade: websocket" not in tokens:
return resp
...
!! The same thing about 'sec-websocket-key' vs Sec-WebSocket-Key