Module html_rewrite
html and http only.Expand description
Middleware that rewrites text/html response bodies on the fly, using
rama’s streaming HTML rewriter (crate::protocols::html::rewrite).
HtmlRewriteLayer wraps a service and, for each response, checks the
Content-Type: a text/html body (that is not content-encoded) is piped
through an HtmlRewriter
as it streams, applying a handler to matched elements; anything else is
forwarded unchanged. Because rewriting changes the body length, the layer
drops the now-stale Content-Length.
The body adapter, HtmlRewriteBody, is also usable on its own — e.g.
composed with MapResponseBodyLayer —
when you already handle the header concerns yourself.
§Handlers
The handler is any type implementing
ElementContentHandler.
The layer requires it to be Clone (it is cloned per response, so each
response rewrites with fresh handler state) and Send. A plain data
struct fits naturally — no Rc<RefCell> / Arc<Mutex> / SyncWrapper
ceremony, since the rewriter is owned and only touched through &mut self
while the body is polled.
When the handler accumulates state, recover it once the body finishes
via HtmlRewriteBody::on_end.
§Encoding
The rewriter sees raw bytes, so a compressed (Content-Encoding) body is
skipped. Place this layer after a decompression layer if you need to
rewrite compressed responses. Charset is assumed UTF-8 (the rewriter is
byte-faithful and does not decode entities).
Structs§
- Html
Rewrite - Rewrites the
text/htmlresponse bodies of the underlying service, using rama’s streamingHtmlRewriter. - Html
Rewrite Body - A response body that feeds the inner body’s bytes through an
HtmlRewriter, emitting rewritten chunks as they become available. - Html
Rewrite Layer - Layer that applies
HtmlRewriteto the responses of the wrapped service.