The Response Body Injection (RBI) module provides a filter that can be used to manipulate an HTML document received in an HTTP response from a backend server. It can be used to insert content into any of the following HTML elements:
Install the Response Body Injection module
Install the RBI module:
apt install hapee-1.5r2-lb-htmldom(or
yum installdepending on your platform of choice).
In the global section of your configuration, add the following line:
filter htmldomdirective to a
backendsection to begin injecting content. Here is an example:
It injects the following markup into the head of the HTML document, which replaces http:// with https:// in links:
filter htmldom directive instructs HAProxy to inject content into an HTML document. It can be declared only once per proxy section. Its syntax is:
filter htmldom [mode <mode>] <action> <content>
The following table describes each argument:
| || |
Sets the HTML parser. It can be set to:
| || |
Identifies the HTML element into which new content will be injected. It is applied to the first matching element. Valid actions are:
| || |
The HTML content to inject into the response from a server. It is a
The filter is automatically deactivated if various conditions are met. They include:
the request method is HEAD
both request and response are HTTP/1.1, but the Transfer-Encoding header value is not chunked and Content-Length is not known
the response contains compressed content (the Content-Encoding header is present)
the response contains the no-transform value in the Cache-Control header (no transformations or conversions should be made)
the Content-Type header value is other than text/html
The filter also modifies the response in the following ways:
To ensure that the response will not be compressed, all occurrences of the Accept-Encoding header are removed from the incoming request.
In order to modify the response, all occurrences of the Content-Length header are removed. If the message is HTTP/1.1 or above, the Transfer-Encoding header is set to chunked.
When inserting a large amount of content into a response, it is important to set
tune.bufsize to the appropriate size.