Appendix J. Migrating from Cowboy 2.2 to 2.3

Cowboy 2.3 focused on making the Cowboy processes behave properly according to OTP principles. This version is a very good milestone toward that goal and most of everything should now work. Release upgrades and a few details will be improved in future versions.

J.1. Features added

  • Add support for all functions from the module sys. Note that Cowboy currently does not implement the sys debugging mechanisms as tracing is recommended instead.
  • Add a max_frame_size option for Websocket handlers to close the connection when the client attempts to send a frame that’s too large. It currently defaults to infinity to avoid breaking existing code but will be changed in a future version.
  • Update Cowlib to 2.2.1.
  • Add support for the 308 status code and a test suite for RFC7538 where it is defined.

J.2. Bugs fixed

  • Ensure timeout options accept the value infinity as documented.
  • Properly reject HTTP/2 requests with an invalid content-length header instead of simply crashing.
  • When switching from HTTP/1.1 to Websocket or user protocols all the messages in the mailbox were flushed. Only messages specific to cowboy_http should now be flushed.
  • Parsing of the x-forwarded-for header has been corrected. It now supports IPv6 addresses both with and without port.
  • Websocket subprotocol tokens are now parsed in a case insensitive manner, according to the spec.
  • Cookies without values are now allowed. For example Cookie: foo.
  • Colons are now allowed within path segments in routes provided to cowboy_router:compile/1 as long as they are not the first character of the path segment.
  • The cowboy_req:delete_resp_header/2 function will no longer crash when no response header was set before calling it.
  • A miscount of the output HTTP/2 flow control window has been fixed. It prevented sending the response body fully to some clients. The issue only affected response bodies sent as iolists.