bouncer/doc/fr/references/layers/rewriter.md
William Petit 05b547da48
All checks were successful
Cadoles/bouncer/pipeline/head This commit looks good
Cadoles/bouncer/pipeline/pr-develop This commit looks good
feat: rewriter layer
2024-06-25 16:50:29 +02:00

3.8 KiB

Layer "Rewriter"

Description

Ce layer permet de modifier dynamiquement certains attributs de requêtes/réponses transitant par le proxy.

Type

rewriter

Schéma des options

Les options disponibles pour le layer sont décrites via un schéma JSON. Elles sont documentées dans le schéma visible ici.

Moteur de règles

Les options rules.request et rules.response permettent de définir des listes de règles utilisant un DSL modifiant de manière dynamique les attributs des requêtes/réponses transitant par le proxy.

Les listes d'instructions sont exécutées séquentiellement.

Bouncer utilise le projet expr comme DSL. En plus des fonctionnalités natives du langage, Bouncer ajoute un certain nombre de fonctions spécifiques au contexte d'utilisation.

Fonctions

Communes

add_header(name string, value string)

Ajouter une valeur à un entête HTTP via son nom name et sa valeur value.

set_header(name string, value string)

Définir la valeur d'un entête HTTP via son nom name et sa valeur value. La valeur précédente est écrasée.

del_headers(pattern string)

Supprimer un ou plusieurs entêtes HTTP dont le nom correspond au patron pattern.

Le patron est défini par une chaîne comprenant un ou plusieurs caractères *, signifiant un ou plusieurs caractères arbitraires.

Requête

set_host(host string)

Modifier la valeur de l'entête Host de la requête.

set_url(url string)

Modifier l'URL du serveur cible.

Réponse

Pas de fonctions spécifiques.

Environnement

Les règles ont accès aux variables suivantes pendant leur exécution. Ces données sont en lecture seule.

Requête

request

La requête en cours de traitement.

{
    method: "string", // Méthode HTTP
    host: "string", // Nom d'hôte (`Host`) associé à la requête
    url: "string", // URL associée à la requête
    proto: "string", // Numéro de version du protocole utilisé
    protoMajor: "int", // Numéro de version majeure du protocole utilisé
    protoMinor: "int",  // Numéro de version mineur du protocole utilisé
    header: { // Table associative des entêtes HTTP associés à la requête
        "string": ["string"]
    },
    contentLength: "int", // Taille du corps de la requête
    transferEncoding: ["string"], // MIME-Type(s) d'encodage du corps de la requête
    trailer: { // Table associative des entêtes HTTP associés à la requête, transmises après le corps de la requête
        "string": ["string"]
    },
    remoteAddr: "string", // Adresse du client HTTP à l'origine de la requête
    requestUri: "string" // URL "brute" associée à la requêtes (avant opérations d'assainissement, utiliser "url" plutôt)
}

Réponse

response

La réponse en cours de traitement.

{
    statusCode: "int", // Code de statut de la réponse
    status: "string", // Message associé au code de statut
    proto: "string", // Numéro de version du protocole utilisé
    protoMajor: "int", // Numéro de version majeure du protocole utilisé
    protoMinor: "int",  // Numéro de version mineur du protocole utilisé
    header: { // Table associative des entêtes HTTP associés à la requête
        "string": ["string"]
    },
    contentLength: "int", // Taille du corps de la réponse
    transferEncoding: ["string"], // MIME-Type(s) d'encodage du corps de la requête
    trailer: { // Table associative des entêtes HTTP associés à la requête, transmises après le corps de la requête
        "string": ["string"]
    },
}
request

Voir section précédente.

Métriques

Pas de métriques spécifiques.