Limitations (v1)
- HTTP/1.1 and HTTP/2 (cleartext prior knowledge and TLS ALPN
h2, with HTTP/1.1 fallback). WebSocket is an H1 upgrade only (see h2.md, ws.md, h3.md) - No redirects or cookies
- Connection pool reuses TCP and frames each message by
Content-Lengthor chunked transfer encoding - HTTP/2
Client::h2_get/h2_sendreuse one connection per origin on that client (not the HTTP/1.1 pool).h2_connect/h2_requeststay one-shot fn drop()onHttpConn/ConnPool/Client/Servercloses owned sockets at GC time (and VM teardown), not RAII. PreferClient::close/close_connwhen shutdown must happen nowcoil testharness does not supportthread::spawn; runexamples/loopback.hy/examples/ws_loopback.hywithcoil(same flags ascoil test) for full TCP loopback- Depends on coil-stdlib (
conv,io::sync) and coil-tls as--roots.libtlsstill needs a local native build on--ffi-search-path; spool does not build it - WebSocket v1: H1 upgrade only (no HTTP/2, no extensions, no fragmented messages)
- IPv6 URL literals not supported
- CR/LF injection in URL/method/headers →
BadUrl Content-Lengthlonger than body →BadResponse
Compiler workarounds#
body_len_str/cl_trailerlookup tables avoid SEGV when concatenatingint_to_decin Result-mode request buildersbuild_request_headhot path is raise-free- Prefer
http://host/?q=over barehost?q=in URLs
TLS#
Client: verified TLS only (new ClientOpts(true, ...)). Server: PEM cert/key via Server::tls (new ServerOpts(...)). Requires the coil-tls package (use tls::{client, server}::enable) and a built libtls, not a Coil tls Cargo feature.