pingora_core::protocols::http::compression

Struct 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 is 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

Source

pub fn new( compression_level: u32, decompress_enable: bool, preserve_etag: bool, ) -> Self

Create a new ResponseCompressionCtx with the expected compression level. 0 will disable the compression. The compression level is applied across all algorithms. The decompress_enable flag will tell the ctx to decompress if needed. The preserve_etag flag indicates whether the ctx should avoid modifying the etag, which will otherwise be weakened if the flag is false and (de)compression is applied.

Source

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.

Source

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

Source

pub fn adjust_level(&mut self, new_level: u32)

Adjust the compression level for all compression algorithms.

§Panic

This function will panic if it has already started encoding the response body.

Source

pub fn adjust_algorithm_level(&mut self, algorithm: Algorithm, new_level: u32)

Adjust the compression level for a specific algorithm.

§Panic

This function will panic if it has already started encoding the response body.

Source

pub fn adjust_decompression(&mut self, enabled: bool)

Adjust the decompression flag for all compression algorithms.

§Panic

This function will panic if it has already started encoding the response body.

Source

pub fn adjust_algorithm_decompression( &mut self, algorithm: Algorithm, enabled: bool, )

Adjust the decompression flag for a specific algorithm.

§Panic

This function will panic if it has already started encoding the response body.

Source

pub fn adjust_preserve_etag(&mut self, enabled: bool)

Adjust preserve etag setting.

§Panic

This function will panic if it has already started encoding the response body.

Source

pub fn adjust_algorithm_preserve_etag( &mut self, algorithm: Algorithm, enabled: bool, )

Adjust preserve etag setting for a specific algorithm.

§Panic

This function will panic if it has already started encoding the response body.

Source

pub fn request_filter(&mut self, req: &RequestHeader)

Feed the request header into this ctx.

Source

pub fn response_header_filter(&mut self, resp: &mut ResponseHeader, end: bool)

Feed the response header into this ctx

Source

pub fn response_body_filter( &mut self, data: Option<&Bytes>, end: bool, ) -> Option<Bytes>

Stream the response body chunks into this ctx. The return value will be the compressed data

Return None if the compressed is not enabled

Source

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.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more