1.4.1 (2018-01-02) ------------------ * Bugfix for a bad merge of HTTPFactory for X-Forwarded-Proto causing Daphne to not start. 1.4.0 (2018-01-02) ------------------ * The X-Forwarded-Proto header can now be used to pass along protocol from a reverse proxy. * WebSocket headers are now correctly always passed as bytestrings. 1.3.0 (2017-06-16) ------------------ * Ability to set the websocket connection timeout * Server no longer reveals the exact Autobahn version number for security * A few unicode fixes for Python 2/3 compatability * Stopped logging messages to already-closed connections as ERROR 1.2.0 (2017-04-01) ------------------ * The new process-specific channel support is now implemented, resulting in significantly less traffic to your channel backend. * Native twisted blocking support for channel layers that support it is now used. While it is a lot more efficient, it is also sometimes slightly more latent; you can disable it using --force-sync. * Native SSL termination is now correctly reflected in the ASGI-HTTP `scheme` key. * accept: False is now a valid way to deny a connection, as well as close: True. * HTTP version is now correctly sent as one of "1.0", "1.1" or "2". * More command line options for websocket timeouts 1.1.0 (2017-03-18) ------------------ * HTTP/2 termination is now supported natively. The Twisted dependency has been increased to at least 17.1 as a result; for more information about setting up HTTP/2, see the README. * X-Forwarded-For decoding support understands IPv6 addresses, and picks the most remote (leftmost) entry if there are multiple relay hosts. * Fixed an error where `disconnect` messages would still try and get sent even if the client never finished a request. 1.0.3 (2017-02-12) ------------------ * IPv6 addresses are correctly accepted as bind targets on the command line * Twisted 17.1 compatability fixes for WebSocket receiving/keepalive and proxy header detection. 1.0.2 (2017-02-01) ------------------ * The "null" WebSocket origin (including file:// and no value) is now accepted by Daphne and passed onto the application to accept/deny. * Listening on file descriptors works properly again. * The DeprecationError caused by not passing endpoints into a Server class directly is now a warning instead. 1.0.1 (2017-01-09) ------------------ * Endpoint unicode strings now work correctly on Python 2 and Python 3 1.0.0 (2017-01-08) ------------------ * BREAKING CHANGE: Daphne now requires acceptance of WebSocket connections before it finishes the socket handshake and relays incoming packets. You must upgrade to at least Channels 1.0.0 as well; see http://channels.readthedocs.io/en/latest/releases/1.0.0.html for more. * http.disconnect now has a `path` key * WebSockets can now be closed with a specific code * X-Forwarded-For header support; defaults to X-Forwarded-For, override with --proxy-headers on the commandline. * Twisted endpoint description string support with `-e` on the command line (allowing for SNI/ACME support, among other things) * Logging/error verbosity fixes and access log flushes properly 0.15.0 (2016-08-28) ------------------- * Connections now force-close themselves after pings fail for a certain timeframe, controllable via the new --ping-timeout option. * Badly-formatted websocket response messages now log to console in all situations * Compatability with Twisted 16.3 and up 0.14.3 (2016-07-21) ------------------- * File descriptors can now be passed on the commandline for process managers that pass sockets along like this. * websocket.disconnect messages now come with a "code" attribute matching the WebSocket spec. * A memory leak in request logging has been fixed. 0.14.2 (2016-07-07) ------------------- * Marked as incompatible with twisted 16.3 and above until we work out why it stops incoming websocket messages working 0.14.1 (2016-07-06) ------------------- * Consumption of websocket.receive is also now required. 0.14.0 (2016-07-06) ------------------- * Consumption of websocket.connect is now required (channels 0.16 enforces this); getting backpressure on it now results in the socket being force closed. 0.13.1 (2016-06-28) ------------------- * Bad WebSocket handshakes now return 400 and an error messages rather than 500 with no content. 0.13.0 (2016-06-22) ------------------- * Query strings are now sent as bytestrings and the application is responsible for decoding. Ensure you're running Channels 0.15 or higher. 0.12.2 (2016-06-21) ------------------- * Plus signs in query string are now handled by Daphne, not Django-by-mistake. Ensure you're running Channels 0.14.3 or higher. * New --root-path and DAPHNE_ROOT_PATH options for setting root path. 0.12.1 (2016-05-18) ------------------- * Fixed bug where a non-ASCII byte in URL paths would crash the HTTP parser without a response; now returns 400, and hardening in place to catch most other errors and return a 500. * WebSocket header format now matches HTTP header format and the ASGI spec. No update needed to channels library, but user code may need updating. 0.12.0 (2016-05-07) ------------------- * Backpressure on http.request now causes incoming requests to drop with 503. Websockets will drop connection/disconnection messages/received frames if backpressure is encountered; options are coming soon to instead drop the connection if this happens. 0.11.4 (2016-05-04) ------------------- * Don't try to send TCP host info in message for unix sockets 0.11.3 (2016-04-27) ------------------- * Don't decode + as a space in URLs 0.11.2 (2016-04-27) ------------------- * Correctly encode all path params for WebSockets 0.11.1 (2016-04-26) ------------------- * Fix bugs with WebSocket path parsing under Python 2 0.11.0 (2016-04-26) ------------------- * HTTP paths and query strings are now pre-decoded before going to ASGI 0.10.3 (2016-04-05) ------------------- * Error on badly formatted websocket reply messages 0.10.2 (2016-04-03) ------------------- * Access logging in NCSAish format now printed to stdout, configurable to another file using --access-log=filename 0.10.1 (2016-03-29) ------------------- * WebSockets now close after they've been open for longer than the channel layer group expiry (86400 seconds by default for most layers). * Binding to UNIX sockets is now possible (use the -u argument) * WebSockets now send keepalive pings if they've had no data for a certain amount of time (20 seconds by default, set with --ping-interval) 0.10.0 (2016-03-21) ------------------- * Multiple cookies are now set correctly * Follows new ASGI single-response-channel spec for ! * Follows new ASGI header encoding spec for HTTP 0.9.3 (2016-03-08) ------------------ * WebSocket query strings are correctly encoded 0.9.2 (2016-03-02) ------------------ * HTTP requests now time out after a configurable amount of time and return 503 (default is 2 minutes) 0.9.1 (2016-03-01) ------------------ * Main thread actually idles rather than sitting at 100% * WebSocket packets have an "order" attribute attached * WebSocket upgrade header detection is now case insensitive 0.9 (2016-02-21) ---------------- * Signal handlers can now be disabled if you want to run inside a thread (e.g. inside Django autoreloader) * Logging hooks that can be used to allow calling code to show requests and other events. * Headers are now transmitted for websocket.connect * http.disconnect messages are now sent * Request handling speed significantly improved