Struct pingora_core::protocols::http::compression::ResponseCompressionCtx
source · pub struct ResponseCompressionCtx(/* private fields */);Expand description
The response compression object. Currently support gzip compression and brotli decompression.
To use it, the caller should create a ResponseCompressionCtx per HTTP session.
The caller should call the corresponding filters for the request header, response header and
response body. If the algorithms are supported, the output response body will be encoded.
The response header will be adjusted accordingly as well. If the algorithm is not supported
or no encoding needed, the response is untouched.
If configured and if the request’s accept-encoding header contains the algorithm supported and the
incoming response doesn’t have that encoding, the filter will compress the response.
If configured and supported, and if the incoming response’s content-encoding isn’t one of the
request’s accept-encoding supported algorithm, the ctx will decompress the response.
§Currently supported algorithms and actions
- Brotli decompression: if the response is br compressed, this ctx can decompress it
- Gzip compression: if the response is uncompressed, this ctx can compress it with gzip
Implementations§
source§impl ResponseCompressionCtx
impl ResponseCompressionCtx
sourcepub fn new(compression_level: u32, decompress_enable: bool) -> Self
pub fn new(compression_level: u32, decompress_enable: bool) -> Self
Create a new ResponseCompressionCtx with the expected compression level. 0 will disable
the compression.
The decompress_enable flag will tell the ctx to decompress if needed.
sourcepub fn is_enabled(&self) -> bool
pub fn is_enabled(&self) -> bool
Whether the encoder is enabled. The enablement will change according to the request and response filter by this ctx.
sourcepub fn get_info(&self) -> Option<(&'static str, usize, usize, Duration)>
pub fn get_info(&self) -> Option<(&'static str, usize, usize, Duration)>
Return the stat of this ctx: algorithm name, in bytes, out bytes, time took for the compression
sourcepub fn adjust_level(&mut self, new_level: u32)
pub fn adjust_level(&mut self, new_level: u32)
Adjust the compression level.
§Panic
This function will panic if it has already started encoding the response body.
sourcepub fn adjust_decompression(&mut self, enabled: bool)
pub fn adjust_decompression(&mut self, enabled: bool)
Adjust the decompression flag.
§Panic
This function will panic if it has already started encoding the response body.
sourcepub fn request_filter(&mut self, req: &RequestHeader)
pub fn request_filter(&mut self, req: &RequestHeader)
Feed the request header into this ctx.
sourcepub fn response_filter(&mut self, t: &mut HttpTask)
pub fn response_filter(&mut self, t: &mut HttpTask)
Feed the response into this ctx. This filter will mutate the response accordingly if encoding is needed.