from __future__ import absolute_import, division, print_function, with_statement
import functools
-import random
-import string
import traceback
from tornado.concurrent import Future
class HeaderEchoHandler(TestWebSocketHandler):
def set_default_headers(self):
+ self.set_header("X-Extra-Response-Header", "Extra-Response-Value")
+
+ def prepare(self):
for k, v in self.request.headers.get_all():
if k.lower().startswith('x-test'):
self.set_header(k, v)
- self.set_header("X-Extra-Response-Header", "Extra-Response-Value")
class NonWebSocketHandler(RequestHandler):
# Ensure that headers can be returned in the response.
# Specifically, that arbitrary headers passed through websocket_connect
# can be returned.
- random_str = ''.join(random.choice(string.ascii_lowercase)
- for i in range(10))
ws = yield websocket_connect(
HTTPRequest('ws://127.0.0.1:%d/header_echo' % self.get_http_port(),
- headers={'X-Test-Hello': 'hello',
- 'X-Test-Goodbye': 'goodbye',
- 'X-Test-Random': random_str}))
+ headers={'X-Test-Hello': 'hello'}))
self.assertEqual(ws.headers.get('X-Test-Hello'), 'hello')
- self.assertEqual(ws.headers.get('X-Test-Goodbye'), 'goodbye')
- self.assertEqual(ws.headers.get('X-Test-Random'), random_str)
self.assertEqual(ws.headers.get('X-Extra-Response-Header'), 'Extra-Response-Value')
yield self.close(ws)
connections.
Custom upgrade response headers can be sent by overriding
- `set_default_headers`.
+ `set_default_headers` or `prepare`.
See http://dev.w3.org/html5/websockets/ for details on the
JavaScript interface. The protocol is specified at
"""
return None
- def set_default_headers(self):
- """Override this to set HTTP headers at the beginning of the
- WebSocket upgrade request.
-
- For example, this is the place to set a custom ``Server`` header.
- Note that setting such headers in the normal flow of request
- processing may not do what you want, since headers may be reset
- during error handling.
- """
- pass
-
def open(self, *args, **kwargs):
"""Invoked when a new WebSocket is opened.