Adloun

La cantine du lycée met en ligne un formulaire de réservation

Exercice de TD · niveau 3 (difficile) · NSI (première), chapitre 10 — Interagir sur le Web · Client, serveur, GET et POST

Énoncé

La cantine du lycée met en ligne un formulaire de réservation :


<form method="get" action="/commander">
  <select name="plat">...</select>
  <button type="submit">Commander</button>
</form>

Le serveur enregistre la commande et débite le compte de l'élève.

Corrigé

1. Trois situations, toutes involontaires :

La cause est unique et porte un nom : une requête GET est censée être idempotente — la rejouer doit laisser le monde dans le même état. Ici, elle débite un compte. Toute l'infrastructure du Web, du bouton « actualiser » aux caches en passant par les robots d'indexation, est bâtie sur cette hypothèse ; un GET qui modifie la trahit.

2. Les deux dernières disparaissent : un POST ne se met pas en favori (l'URL ne porte pas les données), et rien ne pré-charge un POST. La première subsiste : actualiser une page obtenue par POST est possible — le navigateur affiche seulement un avertissement « voulez-vous renvoyer les données ? », que l'on valide sans lire.

3. Non, POST ne suffit pas. Deux mesures s'ajoutent :

Contrôle : avec le jeton, rejouer deux fois exactement la même requête POST ne débite qu'une fois. C'est bien la propriété qu'on voulait, et on l'a obtenue là où elle est vérifiable.

Piège : croire que le problème vient du choix GET/POST. Il vient de ce que l'effet est décidé par une requête que n'importe quoi peut rejouer. POST déplace la difficulté, le jeton la supprime.

Les autres exercices de ce chapitre Le cours du chapitre

Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.