I was getting following exeption in WebSocket client, when trying to connect Tornado WebSocket server.
WebSocket connection to 'ws://localhost:5678/echo' failed: Error during WebSocket handshake: Unexpected response code: 403
and on the server-side log
WARNING:tornado.access:403 GET /echo (::1) 6.00ms
A simple Echo WebSocket server code.
from tornado import websocket, ioloop class EchoWebSocket(websocket.WebSocketHandler): def open(self): print("WebSocket opened") def on_message(self, message): self.write_message(u"You said: " + message) def on_close(self): print("WebSocket closed") app = web.Application([ (r'/echo', EchoWebSocket), ]) if __name__ == '__main__': app.listen(5678) ioloop.IOLoop.instance().start()
It is because the server denies cross-orgin request. We should overide
check_origin method to allow the clients to connect to the server.
def check_origin(self, origin): return True
The above snippet would allow all origin. However, to allow certain set of domains/sub-domains, appropriate validation has to be implemented.
Hope this helps.