Skip to content

Releases: uNetworking/uWebSockets

v20.23.0

08 Oct 06:22
Compare
Choose a tag to compare

HTTP chunked transfer-encoding 🔪 🍰

  • You can now send and receive data that is chunked according to Transfer-Encoding: chunked.
  • Nothing changes from a user perspective; business as usual.

v20.22.0

06 Oct 04:08
Compare
Choose a tag to compare

Dynamically removable HTTP routes and SNI domains

Together with the SNI improvements from v20.18.0 you can now add/remove HTTP routes dynamically, both for the root ("catch all") domain, and for any specific SNI domain.

If you added a route with

app.get("/hello", [](auto *res, auto *req) {

});

You now remove it with app.get("/hello", nullptr);

The same applies to routes added under a SNI name - browsing to the domain with app.domain("server_name") you can then remove the route added.

Note that you cannot remove WebSocket routes just yet (but doing so could make sense semantically).

v20.20.0

28 Sep 04:03
Compare
Choose a tag to compare
  • Fixes undefined behavior in App::removeServerName introduced in v20.18.0

v20.19.0

26 Sep 14:34
88a3e9a
Compare
Choose a tag to compare

Unix sockets

Thanks to @Young-Flash it's now possible to serve HTTP and WebSockets over Unix sockets - which interestingly works on all three platforms Windows, Linux, macOS 🤔

v20.18.0

26 Sep 00:15
01a394c
Compare
Choose a tag to compare

Improved SNI support

This is a backwards compatible change that detaches the URL router from the App, and moves it underneath the SNI support (if any). The new hierarchy is: App -> (SNI) -> URL router.

SNI

One App can have the root level SSL certificate and its URL routes, and/or many per-domain SSL certificates and their own isolated URL routes.

You "browse" between different SNI domains by calling the new function app.domain(server name) before calling app.get or app.post or any such route registration call. This can be chained together in builder pattern. Last "browsed to" SNI is under where you register the URL route handler.

See example ServerName for usage.

v20.17.0

25 Sep 14:01
Compare
Choose a tag to compare

Improved HTTP timeout logic

When a client uploads (HTTP POST) a large file there has been a less-than-ideal timeout logic in uWS, where practically 0.1 byte/sec was enough to keep the connection open. This version bumps the required upload throughput to 16kB/sec as the lowest allowed. Any client uploading slower, will be dropped. You can configure the constant HTTP_RECEIVE_THROUGHPUT_BYTES as you wish.

v20.16.0

04 Sep 02:52
Compare
Choose a tag to compare

HTTP/3 Cinema 🍿 📽️

While still highly experimental, the HTTP/3 support is now functional enough to stream a large video file correctly and without corruption. The video is shown being played by Firefox here, but has since also been tested to work with Chrome, curl and quiche-client.

This is a very visual milestone - it shows not only HTTP/3 working, but both HTTP/1 and HTTP/3 working together on the same thread. As you can see in the picture, an HTTP/1 server is used to instruct (at least Firefox?) the browser to go use the HTTP/3 one instead.

h3cinema

v20.15.0

29 Aug 00:35
Compare
Choose a tag to compare

Experimental HTTP/3 via uWS::H3App

  • Adds experimental uWS::H3App and example. With this type of app you can handle HTTP/3 requests with the same identical interface as for uWS::SSLApp, uWS::App. No code changes needed.
  • This support is hidden under WITH_QUIC flag and entirely unsupported / for testing feedback / smoke testing only.
  • Benchmarks are here.
  • Working example is here.

How to test it

  • This is experimental work entirely hidden under the WITH_QUIC make flag and disabled by default.
  • Compile with WITH_BORINGSSL=1 WITH_QUIC=1 make and run the Http3Server binary. You can test it using quiche-client over IPv6 (you will need an IPv6 localhost address or else it will fail to listen). See Http3Server.cpp for an example quiche-client invocation.
  • You first need to compile both lsquic and boringssl in respective git submodule paths. See their documentation for how to do this (it's pretty easy).

v20.14.0

02 May 00:12
Compare
Choose a tag to compare

Streaming large HTTP response fix

  • Fixes a potential heap-use-after-free when finishing (tryEnd, end) an Http response within onWritable callback (captured variables are destroyed).
  • Affects only users who stream large Http responses with the use of onWritable callback. If your application never sets an onWritable callback, then you're not affected.
  • See uWebSockets.js/examples/VideoStreamer.js for an example of affected use.

Thanks to @o5k @zdm

v20.13.0

20 Apr 11:21
Compare
Choose a tag to compare

This release fixes a minor issue where the HTTP parser did not allow header values with bytes above 7-bit ASCII. Now it is possible to receive any byte sequence except for terminating CRLF. A unit test for this was added.