What's Changed
Bug fixes
- Fix crash on empty / comma-only
X-Forwarded-Forwhenset_trusted_proxies()is configured.get_client_ip()previously calledfront()on a vector that was empty whenever the header tokenized to zero segments ("",",",", , ,"); it now returns an empty string soprocess_request()falls back to the connection-level remote address instead of crashing (5c92857) - Fix keep-alive corruption on requests without a framed body (#2450). The post-response drain ran for any request that
expect_content()accepted, so a method likeDELETE /items/1with noContent-Lengthand noTransfer-Encodingwould, on a persistent connection, letread_contentconsume bytes belonging to the next pipelined request — making the second request appear to vanish. The drain now only runs when the request actually has a framed body (Content-Lengthor chunked). The non-SSL "stray-bytes → 413" payload-limit check is likewise limited to non-persistent connections, since on keep-alive any pending bytes may be the next request rather than an unframed body (91271c0)
Internal
- Extract
detail::has_framed_body()anddetail::is_connection_persistent()helpers used by the keep-alive fix above (d755c43)