relay_server/middlewares/
decompression.rs

1use axum::extract::Request;
2use axum::http::header;
3pub use tower_http::decompression::RequestDecompressionLayer;
4
5/// Map request middleware that removes empty content encoding headers.
6///
7/// This is to be used along with the [`RequestDecompressionLayer`].
8pub fn remove_empty_encoding(mut request: Request) -> Request {
9    if let header::Entry::Occupied(entry) = request.headers_mut().entry(header::CONTENT_ENCODING) {
10        if should_ignore_encoding(entry.get().as_bytes()) {
11            entry.remove();
12        }
13    }
14
15    request
16}
17
18/// Returns `true` if this content-encoding value should be ignored.
19fn should_ignore_encoding(value: &[u8]) -> bool {
20    // sentry-ruby/5.x sends an empty string
21    // sentry.java.android/2.0.0 sends "UTF-8"
22    value == b"" || value.eq_ignore_ascii_case(b"utf-8")
23}