← Retour au site Chargement…

rescriptum

Surface HTTP

Guide

Généré le 30 août 2026

Surface HTTP

Surface HTTP

Deux listeners, et ils ne partagent jamais un port. L’endpoint de réponse est ce à quoi parlent les installateurs ; l’API d’administration est désactivée sauf configuration.

L’endpoint de réponse

RequêteRéponse
POST n’importe quel cheminla réponse, typée par son format
GET n’importe quel cheminla même chose
GET /health200 OK, corps OK\n — pas de jeton nécessaire, jamais limité en débit
toute autre méthode405

N’importe quel chemin, parce que l’URL est gravée dans une ISO et que ce serveur n’a pas son mot à dire. Le chemin n’est pas ignoré pour autant : les segments nommant un alias de format restreignent les documents pouvant répondre, et le chemin fournit aussi les faits path, file et segment.

Codes de statut

CodeQuand
200une réponse s’est appliquée
400le corps n’a pas pu être lu
401RESCRIPTUM_ANSWER_TOKEN est défini et la requête ne l’a pas présenté
404rien n’a revendiqué la requête et il n’y a pas de default pour le format demandé
405une méthode autre que GET ou POST
413corps de plus de 1 Mo, ou Content-Length en annonçant un
500un document ne parse pas, un groupe manque, un template n’a pas pu être rempli, ou la recherche a paniqué
503à RESCRIPTUM_MAX_CONNECTIONS — écrit immédiatement, puis la connexion se ferme

En-têtes de réponse

En-têteValeur
Content-Typeselon le format de la réponse — voir la table ci-dessous
Content-Lengthtoujours défini
Connectionclose
WWW-AuthenticateBearer, sur un 401
FormatContent-Type
toml, et tous les formats texte (ks, preseed, cfg, seed, ipxe)text/plain; charset=utf-8
yaml, ymltext/yaml; charset=utf-8
json, ignapplication/json
xml, autoyast, unattendapplication/xml; charset=utf-8

Le TOML est servi en text/plain plutôt qu’en application/toml parce que c’est ce qu’attend l’installateur Proxmox.

Limites de traitement des requêtes

Plafond du corps1 Mo. Un Content-Length invraisemblable est refusé depuis l’en-tête, avant toute lecture — plutôt que d’allouer pour lui et de faire sauter une limite plus tard
Délai de lecture des en-têtesRESCRIPTUM_TIMEOUT_SECS, 10 s par défaut
Échéance de la connexion entièrela même valeur. Les deux sont nécessaires : le délai d’en-têtes s’arrête à la fin des en-têtes, donc un client qui promet un corps sans l’envoyer garerait sinon une connexion indéfiniment
ConcurrenceRESCRIPTUM_MAX_CONNECTIONS en vol ; au-delà, un 503 et fermeture plutôt qu’une mise en file
Authentificationseulement quand RESCRIPTUM_ANSWER_TOKEN est défini. Comparée en temps constant. Les échecs sont journalisés et jamais limités en débit

Authentification

Authorization: Bearer <RESCRIPTUM_ANSWER_TOKEN>

Proxmox l’envoie quand son ISO a été préparée avec --answer-auth-token. Rien d’autre ne le peut, ce qui est pourquoi c’est désactivé par défaut. Voir Sécurité.

L’API d’administration

Un listener séparé, RESCRIPTUM_ADMIN_ADDR, en SQLite uniquement. Détails complets sur sa propre page.

RequêteRôle
GET /machines, GET /groupslister les identifiants
GET /machines/{id}, GET /groups/{name}, GET /defaultle document stocké, tel qu’écrit
PUT /machines/{id}, PUT /groups/{name}, PUT /defaultstocker un document
DELETE /machines/{id}, DELETE /groups/{name}, DELETE /defaulten supprimer un
GET /resolve/{id}la réponse fusionnée que cette machine recevrait
GET /checkles problèmes actuels
GET /healthvivacité — pas de jeton, jamais bloqué

Tous les endpoints de document prennent ?format=<ext>, toml par défaut.

CodeQuand
200fait
400document malformé, identifiant invalide, ou corps non-UTF-8
401jeton manquant ou faux
404document ou endpoint inexistant ; rien ne se résout pour cet identifiant
409l’écriture aurait cassé le jeu de réponses (annulée), ou un resolve qui n’a pas pu rendre
413document de plus de 256 Ko
429cette adresse est bloquée ; Retry-After dit pour combien de temps
500le store n’a pas pu être lu ou écrit

Chaque réponse d’administration définit Connection: close. Un GET /resolve réussi définit aussi X-Answer-Source, portant la même description que la ligne de log.

Journalisation

Une ligne par requête, sur stderr par défaut. RESCRIPTUM_LOG choisit ce qui est gardé et RESCRIPTUM_LOG_FILE où cela va — voir journalisation.

2026-08-24T08:43:37Z 127.0.0.1:61721 POST /answer body=102 200 format=toml machine=98fa9b50d810 group=example-rack bytes=431

Les lignes de niveau serveur portent - là où serait l’adresse du pair. Voir dépannage.