Regarde enfin les écrans s'afficher, et trouve ce que 618 tests taisaient
La 7ᵉ série s'était close sur un aveu : aucun écran n'avait été regardé. Balayage des vingt-deux routes à 320, 375 et 1280 px. Les huit lots tiennent leurs promesses ; trois défauts en sortent, qu'aucun test ne pouvait voir. L'arbre des séries débordait de 8 px à 320 px : sa ligne est elle-même un élément de flex, et « min-width: auto » lui interdisait de rétrécir. C'est mot pour mot la leçon du lot M, non appliquée à cet étage de la cascade. L'ISBN à tirets faisait défiler toute la fiche — 395 px pour un écran de 320. « white-space: nowrap » y annulait le « word-break » dont le dd est muni justement pour cela. Le défaut de CSS était déjà le bon comportement : une ligne quand il y a la place, une coupure au tiret sinon. Le troisième est le sérieux : le relais de couvertures rendait 404 une fois sur trois sur une couverture qui existe. archive.org extrait l'image d'un ZIP à la volée et met 5 à 15 s, le délai coupait à 10. Rien n'était alors mis en cache, donc CORS puis relais se rejouaient à chaque affichage — le défaut même que ce relais existe pour corriger. Un 404 ne prouve rien ici, par construction : le relais répond 404 à tout refus pour ne pas être un oracle. Il a désormais son propre délai, personne n'attendant derrière un cache qui se remplit en tâche de fond. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
+14
-1
@@ -36,6 +36,19 @@ builder.Services.AddScoped<IFournisseurUtilisateur, FournisseurUtilisateurSsowat
|
||||
// Timeout court : une source lente ne doit pas bloquer la cascade, l'appelant bascule sur la suivante.
|
||||
var timeoutSources = TimeSpan.FromSeconds(10);
|
||||
|
||||
// ⚠️ Le relais de couvertures a son PROPRE délai, et bien plus long. Ce n'est pas une largesse :
|
||||
// les deux appels n'ont pas le même témoin. Un lookup ISBN fait patienter quelqu'un devant un
|
||||
// formulaire — d'où les 10 s ci-dessus, et la bascule sur la source suivante. Le relais, lui,
|
||||
// remplit un cache en tâche de fond : personne n'attend derrière, et abandonner ne fait pas
|
||||
// gagner du temps, cela perd la couverture.
|
||||
//
|
||||
// Mesuré le 2026-08-21 : les couvertures OpenLibrary aboutissent sur `archive.org`, qui les
|
||||
// EXTRAIT D'UNE ARCHIVE ZIP à la volée et met 5 à 15 s. À 10 s, le relais répondait 404 une fois
|
||||
// sur trois — indistinguable, pour l'appelant, d'une URL inconnue. L'image n'était alors jamais
|
||||
// mise en cache, et le client rejouait CORS puis relais à CHAQUE affichage : exactement le
|
||||
// défaut que ce relais existe pour corriger.
|
||||
var timeoutRelaisCouvertures = TimeSpan.FromSeconds(30);
|
||||
|
||||
builder.Services.AddHttpClient<IBnfClient, BnfClient>(http =>
|
||||
{
|
||||
http.BaseAddress = new Uri(BnfClient.UrlBase);
|
||||
@@ -67,7 +80,7 @@ builder.Services.AddScoped<IIsbnLookupService, IsbnLookupService>();
|
||||
// le SSRF.
|
||||
builder.Services.AddHttpClient<IServiceCouvertures, ServiceCouvertures>(http =>
|
||||
{
|
||||
http.Timeout = timeoutSources;
|
||||
http.Timeout = timeoutRelaisCouvertures;
|
||||
http.DefaultRequestHeaders.UserAgent.ParseAdd("MaBibli/0.1 (bibliotheque personnelle auto-hebergee)");
|
||||
})
|
||||
.ConfigurePrimaryHttpMessageHandler(() => new SocketsHttpHandler
|
||||
|
||||
Reference in New Issue
Block a user