The point about reconstructing htu behind a gateway is the part most DPoP write-ups skip. One concrete suggestion is to stop deriving the URI from request headers at all and instead configure the canonical external origin per resource server, then compare htu against origin plus the routed path after rewrite. That removes the X-Forwarded-Host choice from the attacker's hands. For the jti replay cache, a shared store with a TTL equal to the acceptance window plus clock skew keeps state bounded, but it becomes a hard dependency on the request path, so it is worth deciding up front whether a cache outage fails closed. Do you think the hostile-test matrix should also include a request that reaches the app via an internal route that bypasses the proxy, since that is where both the Client-Cert stripping and the htu rebuild tend to diverge?