Standards and sources

The specifications, RFCs and official documentation ZigProxy is built on, what each one actually governs, and which is the current document to cite.

Last updated 8 September 2026

Proxy behaviour is defined across a surprisingly large set of documents, several of which have been obsoleted by newer ones that people still cite by the old number. This page is the index: what governs what, which document is current, and where the gaps are.

Core HTTP semantics#

The 2022 revision replaced the RFC 7230 to 7235 series. If you see a citation to RFC 7230 or RFC 2616, it is out of date, and in the case of RFC 2616 it has been obsolete since 2014.

DocumentGovernsReplaces
RFC 9110HTTP semantics: methods, status codes, header fields, intermediaries, CONNECT, Via, caching directives shared with RFC 9111RFC 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694 and parts of 7230; it also updates RFC 3864
RFC 9111HTTP caching, Cache-Control, shared vs private caches, VaryRFC 7234
RFC 9112HTTP/1.1 message syntax, framing, Content-Length vs Transfer-Encoding precedence. Updated by RFC 9931 on optimistic protocol transitionsremainder of RFC 7230
RFC 9113HTTP/2, pseudo-headers, HPACK usage, connection-specific header prohibitionRFC 7540 and RFC 8740
RFC 9114HTTP/3 over QUICnew
RFC 9204QPACK header compression for HTTP/3new
RFC 9000QUIC transportnew

RFC 9112 section 6.3, "Message Body Length", is the specific text behind HTTP request smuggling: when a message carries both Content-Length and Transfer-Encoding: chunked, the Transfer-Encoding overrides the Content-Length, and an intermediary that chooses to forward the message must first remove the received Content-Length field. Section 6.1 is the Transfer-Encoding field definition itself.

Forwarding and client identity#

DocumentGovernsStatus in practice
RFC 7239The Forwarded header: for, by, host, proto, obfuscated identifiersStandardised, sparsely deployed. See the Forwarded header
RFC 9110 section 7.6.3The Via header, which every forwarding proxy is required to updateWidely implemented, widely ignored by tooling
The PROXY protocol specificationv1 text and v2 binary formats, TLV registryNot an RFC. Maintained by HAProxy Technologies and implemented very widely. See the PROXY protocol
No specificationX-Forwarded-For, X-Real-IP, X-Forwarded-Proto, X-Forwarded-HostDe facto only. Behaviour differs between implementations, which is the subject of the X-Forwarded-For header

That last row is the single most important fact on this page. The header the entire internet uses to identify clients has no normative definition, which is precisely why implementations disagree about ordering, duplication and trust.

Tunnelling and non-HTTP proxying#

DocumentGoverns
RFC 9110 section 9.3.6The CONNECT method and tunnel establishment
RFC 8441Extended CONNECT for HTTP/2, which is how WebSockets work over HTTP/2
RFC 9298Proxying UDP in HTTP, the CONNECT-UDP mechanism. Updated by RFC 9484 and RFC 9931
RFC 9297HTTP Datagrams and the Capsule Protocol
RFC 1928SOCKS protocol version 5
RFC 1929Username and password authentication for SOCKS 5
RFC 6455The WebSocket protocol and its HTTP/1.1 Upgrade handshake

Authentication#

DocumentGoverns
RFC 9110 sections 11.7.1, 11.7.2 and 15.5.8Proxy-Authenticate and Proxy-Authorization are 11.7.1 and 11.7.2; 407 Proxy Authentication Required is 15.5.8
RFC 7617The Basic authentication scheme, which with RFC 7616 and RFC 7235 obsoletes RFC 2617
RFC 7616The Digest authentication scheme
RFC 4559SPNEGO-based Kerberos and NTLM in HTTP, the Negotiate scheme. Informational, not Standards Track

TLS#

DocumentGoverns
RFC 9846TLS 1.3, including post-handshake client authentication. Published in 2026, it obsoletes RFC 8446, which is the number most tooling and documentation still cites
RFC 5246TLS 1.2, obsoleted by RFC 8446 and now RFC 9846, still relevant for renegotiation-based client certificate behaviour
RFC 6066TLS extensions including Server Name Indication, the basis of SNI routing
RFC 8555ACME, the protocol behind automatic certificate issuance in Caddy and Traefik
RFC 9162Certificate Transparency version 2.0, which obsoletes RFC 6962, and why locally installed roots are exempt from it

Addressing#

DocumentGoverns
RFC 1918Private IPv4 address space, the usual content of a trusted proxy list
RFC 6598Shared address space 100.64.0.0/10, used by carrier-grade NAT and by several cloud load balancers
RFC 4291IPv6 addressing, including the IPv4-mapped form that breaks naive trust checks
RFC 6890, updated by RFC 8190The registry of special-purpose address blocks, the correct basis for an SSRF deny list

Vendor documentation#

Configuration claims are checked against the official documentation for the version named in the text.

Where the gaps are#

Three areas that this site covers have no normative specification at all, which is worth knowing before you argue about correct behaviour with a vendor:

  1. X-Forwarded-For semantics. No RFC. Ordering, duplicate field handling and trust are conventions.
  2. no_proxy matching. No specification of any kind. Every client implemented it independently, and they disagree, which is documented in the no_proxy environment variable and testable with the no_proxy tester.
  3. PAC file semantics. The format originated as a Netscape document. Helper function behaviour, return string syntax support and error handling differ per browser. See PAC files and WPAD.

When there is no specification, "correct" means "matches the implementation you are actually running". That is why every page here version-qualifies its claims, and why the editorial standards require it.