Ответ 1
Tornado 4.0 внедрил по умолчанию ту же проверку происхождения. Это проверяет, что заголовок источника, заданный браузером, совпадает с заголовком хоста
Код выглядит следующим образом:
def check_origin(self, origin):
"""Override to enable support for allowing alternate origins.
The ``origin`` argument is the value of the ``Origin`` HTTP header,
the url responsible for initiating this request.
.. versionadded:: 4.0
"""
parsed_origin = urlparse(origin)
origin = parsed_origin.netloc
origin = origin.lower()
host = self.request.headers.get("Host")
# Check to see that origin matches host directly, including ports
return origin == host
Для того, чтобы ваше соединение с прокси-сервером продолжало работать, вам необходимо переопределить происхождение проверки в WebSocketHandler и присваивать белый список доменам, которые вас интересуют. Что-то вроде этого.
import re
from tornado import websocket
class YouConnection(websocket.WebSocketHandler):
def check_origin(self, origin):
return bool(re.match(r'^.*?\.mydomain\.com', origin))
Это приведет к тому, что соединения, проходящие через info.mydomain.com
, пройдут по-прежнему.