| [appendix] |
| == Migrating from Gun 2.1 to 2.2 |
| |
| Gun 2.2 contains many features and fixes, including |
| an experimental HTTP/3 implementation. |
| |
| Gun 2.2 requires Erlang/OTP 24.0 or greater. |
| |
| === Features added |
| |
| * Gun will now do wildcard certificate matching by |
| default, as required by the HTTP protocol, by |
| setting the `customize_hostname_check` ssl option. |
| |
| * User pings are now supported for HTTP/2. User pings |
| are PING frames sent by the user, with the |
| corresponding PING_ACK resulting in a `gun_notify` |
| message being sent to the user process. They can |
| be used to measure latency or do other checks. |
| |
| * The `reply_to` request option has been extended to |
| accept a fun or an MFA that will be called when a |
| reply must be sent to the user process. |
| |
| * The `state_name`, `event_handler` and `event_handler_state` |
| fields were added to `gun:info/1`. |
| |
| * Update Cowlib to 2.15.0. |
| |
| === Experimental features added |
| |
| * Experimental support for HTTP/3 has been added. |
| Websocket over HTTP/3 is not currently implemented. |
| HTTP/3 support is disabled by default; to enable, |
| the environment variable GUN_QUICER must be set at |
| compile-time. |
| |
| === Bugs fixed |
| |
| * TLS 1.3 performs certificate validation independently |
| from the handshake, which means that certificate errors |
| can arrive after the handshake has completed. This is |
| in part to support post-handshake authentication. Gun |
| will now replace `{error, closed}` and similar socket |
| errors with the TLS alert when possible, including for |
| TLS over TLS and TLS over HTTP/2 scenarios. |
| |
| * HTTP/2 tunneling has been improved: WINDOW_UPDATE |
| frames are now properly sent, and flow control is |
| handled. In addition closing the stream is better |
| handled. This impacts both proxying scenarios as |
| well as Websocket over HTTP/2. |
| |
| * HTTP/2 will now properly send a NO_ERROR "error" |
| code when initiating graceful shutdown. |
| |
| * HTTP/2 will now properly track the number of |
| streams currently running and immediately fail |
| when the user tries to open a stream too many |
| compared to what the server allows. |
| |
| * Sometimes stray HTTP/2 timeout messages could |
| be received, producing a log message. This was |
| because they were not cleaned up on disconnect. |
| Now they are. |
| |
| * Socket errors were not properly handled when |
| sending Websocket PONG frames. This has been |
| corrected. |
| |
| * Trying to send a Websocket frame over an HTTP |
| connection (before the Websocket upgrade) will |
| now result in an error sent to the user process. |
| |
| * When connecting to HTTP via a Unix domain socket, |
| Gun will now set the host header to "localhost" |
| by default. Previously an invalid host header |
| was sent. |
| |
| * Data could be lost when switching to the raw |
| protocol. This has been corrected. |
| |
| * Documentation has been updated to describe the |
| `notify_settings_changed` option; as well as |
| to recommend disabling automatic reconnect when |
| Websocket is used; and to provide context around |
| potential security risks due to HTTP/2 compressed |
| headers. |