aboutsummaryrefslogtreecommitdiffhomepage
path: root/pingora-proxy/src/proxy_trait.rs
diff options
context:
space:
mode:
Diffstat (limited to 'pingora-proxy/src/proxy_trait.rs')
-rw-r--r--pingora-proxy/src/proxy_trait.rs18
1 files changed, 18 insertions, 0 deletions
diff --git a/pingora-proxy/src/proxy_trait.rs b/pingora-proxy/src/proxy_trait.rs
index 00e54f4..e67a9f0 100644
--- a/pingora-proxy/src/proxy_trait.rs
+++ b/pingora-proxy/src/proxy_trait.rs
@@ -18,6 +18,7 @@ use pingora_cache::{
CacheKey, CacheMeta, ForcedInvalidationKind,
RespCacheable::{self, *},
};
+use proxy_cache::range_filter::{self};
use std::time::Duration;
/// The interface to control the HTTP proxy
@@ -216,6 +217,23 @@ pub trait ProxyHttp {
)
}
+ /// This filter is called when cache is enabled to determine what byte range to return (in both
+ /// cache hit and miss cases) from the response body. It is only used when caching is enabled,
+ /// otherwise the upstream is responsible for any filtering. It allows users to define the range
+ /// this request is for via its return type `range_filter::RangeType`.
+ ///
+ /// It also allow users to modify the response header accordingly.
+ ///
+ /// The default implementation can handle a single-range as per [RFC7232].
+ fn range_header_filter(
+ &self,
+ req: &RequestHeader,
+ resp: &mut ResponseHeader,
+ _ctx: &mut Self::CTX,
+ ) -> range_filter::RangeType {
+ proxy_cache::range_filter::range_header_filter(req, resp)
+ }
+
/// Modify the request before it is sent to the upstream
///
/// Unlike [Self::request_filter()], this filter allows to change the request headers to send