4.5 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: { // URL associée à la requête sous sa forme structurée
"scheme": "string", // Schéma HTTP de l'URL
"opaque": "string", // Données opaque de l'URL
"user": { // Identifiants d'URL (Basic Auth)
"username": "",
"password": ""
},
"host": "string", // Nom d'hôte (<domaine>:<port>) de l'URL
"path": "string", // Chemin de l'URL (format assaini)
"rawPath": "string", // Chemin de l'URL (format brut)
"rawQuery": "string", // Variables d'URL (format brut)
"fragment" : "string", // Fragment d'URL (format assaini)
"rawFragment" : "string" // Fragment d'URL (format brut)
},
rawUrl: "string", // URL associée à la requête (format assaini)
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.