From: Maximiliano Sandoval <m.sandoval@proxmox.com>
To: pbs-devel@lists.proxmox.com
Subject: [pbs-devel] [PATCH proxmox v3 0/5] Teach HTTP client how to decode deflate
Date: Wed, 10 Apr 2024 16:30:31 +0200 [thread overview]
Message-ID: <20240410143036.81807-1-m.sandoval@proxmox.com> (raw)
This patch series adds support for decoding HTTP requests if they contain the
Content-Encoding=deflate header. Deciding on a public API (and implementing it)
to set this header is out-of-scope for this merge request a the moment of
writing 🙈.
Note that currently the proxmox-rest-server replies with deflated replies in the
following functions:
- handle_api_request: Called as part of Formated::handle_request and
H2Service::handle_request. Always compresses if the client declares that
supports deflate.
- handle_unformatted_api_request: Called as part of Unformatted::handle_request.
It decides whether to compress the contents same as before
- simple_static_file_download: Called as part of handle_static_file_download
which is called in ApiConfig::handle_request, this one decides whether to
compress based on the fn extension_to_content_type which is a map
format:should-be-compressed and whether the clients supports it.
- chunked_static_file_download is called as part of handle_static_file_downloda
same as before
One thing that might be worth pointing out is that according to [1], when the
client supports `Accept-Encoding=deflate`, the HTTP server can reply with
`Content-Encoding=deflate` and encode the body using zlib, which means that it
should be encoded with deflate with the zlib headers included. This is somewhat
confusing but in short it means that one should use a zlib encoder rather than a
deflate encoder. At the moment the server always compresses using deflate
without the zlib headers, not a zlib encoder.
[1] https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Encoding#deflate
Differences from v2:
- Split into multiple commits
- More tests
- Add builders for DeflateEndoder and DeflateDecoder
- Both the deflate encoder and decoder where moved into a folder
Maximiliano Sandoval (5):
compression: deflate: Move encoder into a mod
compression: deflate: add builder pattern
compression: deflate: add a decoder
compression: deflate: add test module
http: teach the Client how to decode deflate content
proxmox-compression/Cargo.toml | 3 +-
.../src/{ => deflate}/compression.rs | 59 +++++--
.../src/deflate/decompression.rs | 141 +++++++++++++++
proxmox-compression/src/deflate/mod.rs | 167 ++++++++++++++++++
proxmox-compression/src/lib.rs | 4 +-
proxmox-compression/src/zip.rs | 2 +-
proxmox-http/Cargo.toml | 7 +
proxmox-http/src/client/simple.rs | 65 ++++++-
8 files changed, 430 insertions(+), 18 deletions(-)
rename proxmox-compression/src/{ => deflate}/compression.rs (83%)
create mode 100644 proxmox-compression/src/deflate/decompression.rs
create mode 100644 proxmox-compression/src/deflate/mod.rs
--
2.39.2
next reply other threads:[~2024-04-10 14:30 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-04-10 14:30 Maximiliano Sandoval [this message]
2024-04-10 14:30 ` [pbs-devel] [PATCH proxmox v3 1/5] compression: deflate: Move encoder into a mod Maximiliano Sandoval
2024-04-12 12:41 ` Gabriel Goller
2024-04-10 14:30 ` [pbs-devel] [PATCH proxmox v3 2/5] compression: deflate: add builder pattern Maximiliano Sandoval
2024-04-10 14:30 ` [pbs-devel] [PATCH proxmox v3 3/5] compression: deflate: add a decoder Maximiliano Sandoval
2024-04-10 14:30 ` [pbs-devel] [PATCH proxmox v3 4/5] compression: deflate: add test module Maximiliano Sandoval
2024-04-10 14:30 ` [pbs-devel] [PATCH proxmox v3 5/5] http: teach the Client how to decode deflate content Maximiliano Sandoval
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240410143036.81807-1-m.sandoval@proxmox.com \
--to=m.sandoval@proxmox.com \
--cc=pbs-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox