From cb9214f713cf04e5c5a60e0723ab64845a2d42f0 Mon Sep 17 00:00:00 2001 From: Nicholas Barbier Date: Mon, 17 Nov 2025 08:53:30 -0500 Subject: [PATCH 1/2] Add host() method to RequestHeader --- pingora-http/src/lib.rs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/pingora-http/src/lib.rs b/pingora-http/src/lib.rs index ce081027..18809dff 100644 --- a/pingora-http/src/lib.rs +++ b/pingora-http/src/lib.rs @@ -323,6 +323,17 @@ impl RequestHeader { self.base.version = version; } + /// Return the host from the request. + /// + /// Checks (in order): `:authority` pseudo-header (HTTP/2), `Host` header (HTTP/1), URI host. + pub fn host(&self) -> Option<&str> { + self.headers + .get(":authority") + .or_else(|| self.headers.get(http::header::HOST)) + .and_then(|v| v.to_str().ok()) + .or_else(|| self.uri.host()) + } + /// Clone `self` into [http::request::Parts]. pub fn as_owned_parts(&self) -> ReqParts { clone_req_parts(&self.base) From 2650f2706025d95f366b00b538b4f3a67aeb96d9 Mon Sep 17 00:00:00 2001 From: Nicholas Barbier Date: Mon, 17 Nov 2025 08:57:52 -0500 Subject: [PATCH 2/2] Add finish_downstream_session to ProxyHttp --- pingora-proxy/src/lib.rs | 8 +++----- pingora-proxy/src/proxy_trait.rs | 11 +++++++++++ 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/pingora-proxy/src/lib.rs b/pingora-proxy/src/lib.rs index 5bb49611..fc54da46 100644 --- a/pingora-proxy/src/lib.rs +++ b/pingora-proxy/src/lib.rs @@ -656,12 +656,10 @@ where self.inner.logging(&mut session, None, &mut ctx).await; self.cleanup_sub_req(&mut session); let persistent_settings = HttpPersistentSettings::for_session(&session); - return session - .downstream_session - .finish() + return self + .inner + .finish_downstream_session(session.downstream_session, &mut ctx) .await - .ok() - .flatten() .map(|s| ReusedHttpStream::new(s, Some(persistent_settings))); } /* else continue */ diff --git a/pingora-proxy/src/proxy_trait.rs b/pingora-proxy/src/proxy_trait.rs index e3636528..3db97ce4 100644 --- a/pingora-proxy/src/proxy_trait.rs +++ b/pingora-proxy/src/proxy_trait.rs @@ -578,6 +578,17 @@ pub trait ProxyHttp { ) -> Result<()> { Ok(()) } + + /// Called when response_sent is true from request_filter, allowing custom handling of the downstream session. + /// + /// Returns an optional Stream if the connection can be reused. + async fn finish_downstream_session( + &self, + downstream_session: Box, + _ctx: &mut Self::CTX, + ) -> Option { + downstream_session.finish().await.ok().flatten() + } } /// Context struct returned by `fail_to_proxy`.