websockets example python websocket tornado

python - example - tornado 403 GET advertencia al abrir websocket



tornado websocket example (2)

Solución levemente modificada de @ maxhawkdown.

from tornado.util import PY3 if PY3: from urllib.parse import urlparse # py2 xrange = range else: from urlparse import urlparse # py3 class ChatHandler(tornado.websocket.WebSocketHandler): CORS_ORIGINS = [''localhost''] def check_origin(self, origin): parsed_origin = urlparse(origin) # parsed_origin.netloc.lower() gives localhost:3333 return parsed_origin.hostname in self.CORS_ORIGINS

Encontré este script python que debería permitirme abrir un WebSocket. Sin embargo, recibo la advertencia [W 1402720 14:44:35 web:1811] 403 GET / (192.168.0.102) 11.02 ms en mi terminal Linux cuando intento abrir el WebSocket real (usando el complemento Old WebSocket Terminal Chrome). Los mensajes "conexión abierta", "conexión cerrada" y "mensaje recibido" nunca se imprimen en la ventana del terminal.

import tornado.httpserver import tornado.ioloop import tornado.options import tornado.web import tornado.websocket class MyHandler(tornado.websocket.WebSocketHandler): def open(self): print "connection opened" self.write_message("connection opened") def on_close(self): print "connection closed" def on_message(self,message): print "Message received: {}".format(message) self.write_message("message received") if __name__ == "__main__": tornado.options.parse_command_line() app = tornado.web.Application(handlers=[(r"/",MyHandler)]) server = tornado.httpserver.HTTPServer(app) server.listen(8888) tornado.ioloop.IOLoop.instance().start()


por favor añadir

def check_origin(self, origin): return True

en la clase MyHandler como este

class MyHandler(tornado.websocket.WebSocketHandler): def check_origin(self, origin): return True def open(self): print "connection opened" self.write_message("connection opened") def on_close(self): print "connection closed" def on_message(self,message): print "Message received: {}".format(message) self.write_message("message received")

De los DOC:

De forma predeterminada, [ check_origin ] rechaza todas las solicitudes con un origen en un host distinto de este.

Esta es una protección de seguridad contra los ataques de secuencias de comandos entre sitios en los navegadores, ya que los WebSockets pueden omitir las políticas habituales de mismo origen y no usan encabezados CORS.

Y otra vez:

Esta es una medida de seguridad importante; no lo deshabilite sin entender las implicaciones de seguridad. En particular, si su autenticación está basada en cookies, debe restringir los orígenes permitidos por check_origin () o implementar su propia protección similar a XSRF para las conexiones de websocket. Vea estos artículos para más.

Link .