2016-08-25 3 views
0

Я новичок в веб-разработке, поэтому позвольте мне объяснить:
Я хочу, чтобы мой сервер Python Tornado общался с веб-страницей. Моя веб-страница использует WebSockets и функцию onmessage для печати того, что она должна получать с сервера Tornado. В основном, здесь есть HTML JavaScript часть:Python Tornado: как установить заголовки WebSocket?

$(document).ready(function() { 

    var myURL = "http://localhost:8888"; 
    var source = new EventSource(myURL, { withCredentials: true }); // Access-Control-Allow-Origin 
    ... 
    source.onmessage = function(event) { 
     console.log("received new event!"); 
    }; 
    ... 
}); // ready() 

Я устанавливаю параметр withCredentials в true так CORS включены.

На стороне Tornado у меня есть класс WebSocket, который должен отвечать, но я не знаю, как установить заголовок для включения Access-Control-Allow-Origin. Вот код смерча:

class EchoWebSocket(tornado.websocket.WebSocketHandler): 

    def check_origin(self, origin): 
    return True 

    def on_message(self, message): 
    self.write_message(u"Received message: " + message) 

def make_app(): 
    return tornado.web.Application([ ('/', EchoWebSocket), ]) 

if __name__ == '__main__': 
    app = make_app() 
    app.listen(8888) 
    print 'listening on port 8888...' 
    # start main loop 
    tornado.ioloop.IOLoop.current().start() 

Я придерживаюсь следующей ошибки в своем браузере!

GET http://localhost:8888/ [HTTP/1.1 400 Bad Request 1ms] 
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost:8888/. (Reason: CORS header 'Access-Control-Allow-Origin' missing). 

Что мне не хватает ???

ответ

2

Ваш javascript использует EventSource, но ваш сервер обслуживает WebSockets. Это две совершенно разные вещи. Вы должны изменить один из них, чтобы соответствовать другому.

Смежные вопросы