chrome-148 desktop + android presets
Adds chrome-148-windows / chrome-148-linux / chrome-148-macos /
chrome-148-android. Wire-level diff vs chrome-147 is just two
header values (User-Agent version bump + sec-ch-ua brand list
rotation). TLS extension shuffle continues per-handshake the
same way utls already produces; JA4 stays
t13d1516h2_8daaf6152771_d8a2da3f94cd. chrome-latest aliases
(and platform-specific chrome-latest-* + android-chrome-latest)
now resolve to 148. iOS already at 148 from v1.6.5.
WithoutCookieJar() across all 4 bindings
New SessionOption that disables the internal cookie jar
entirely — Set-Cookie headers from responses are not stored,
the jar is not consulted to inject Cookie: headers on
subsequent requests. Caller-provided Cookie: headers always
pass through. Useful when an application maintains its own
cookie store (database, shared cache across sessions) and
wants the lib to be byte-transparent about cookies.
- Go: httpcloak.WithoutCookieJar()
- Python: without_cookie_jar=True
- Node.js: withoutCookieJar: true
- .NET: withoutCookieJar: true
Guards both Request and RequestStream paths in the session
layer. Design originally proposed in andreacanes/httpcloak
(based on gkopp13's patch); implementation expanded to cover
Set-Cookie storage paths in addition to the inject-on-request
path.
WithLocalAddrIP(net.IP) ergonomic alias
Drop-in net.IP-typed sibling for WithLocalAddress(string).
Lets callers who already hold a parsed IP skip the String()
round-trip. Same internal storage, nil net.IP is a no-op so
conditional option chains don't accidentally clobber a
previously-set address.
Other notable
- HTTP/3 PRIORITY_UPDATE on the control stream now uses the
actual request stream ID (was hardcoded 0 — silently dropped
by H3 fingerprinters because real Chrome never references
stream 0) and the priority field value derived from the
request's "priority:" header (was hardcoded "u=0, i" — only
matched Chrome for document navigations). Visible |984832|
token now appears in h3_text matching real Chrome 147+
captures byte-for-byte. Lives in sardanioss/quic-go v1.2.25.
- client.Client.DoStream cookie jar parity with Do — the
lower-level Go client API now applies jar cookies before
streaming requests AND stores Set-Cookie from streamed
responses. Session-level RequestStream and all language
bindings already had parity; this only mattered for Go users
on the lower-level client.Client API. Resolves the GH issue
asking specifically about Client.DoStream coverage.
- IP_FREEBIND sockopt actually wired now when WithLocalAddress
is set. The doc comment had been claiming "Works with
IP_FREEBIND on Linux" since v1.5.x; now the kernel actually
sees IP_FREEBIND=15 / IPV6_FREEBIND=78 set on every TCP dial
socket and UDP listen socket — without it, binding to a
routed-but-not-locally-configured IPv6 from a /48 prefix
silently failed with EADDRNOTAVAIL.
- @httpcloak/win32-arm64 dropped from npm optionalDependencies.
The package was never built by CI (matrix is linux-x64,
linux-arm64, darwin-x64, darwin-arm64, win32-x64) so npm
install on yarn classic / pnpm strict modes errored out at
install time. Fixed: only advertise platforms we actually
publish. Re-add when CI gets an aarch64-w64-mingw32-gcc
cross-compiler step.