Števec ogledov, ki je naš katalog spremenil v napako 502

Pošiljanje

Stran, ki našteva vse komplete, ki jih prodajamo, je približno 41 ur po zagonu vsakemu obiskovalcu odgovarjala s 502 Bad Gateway. Vsaka lastna stran kompleta je delovala, domača stran je delovala, blagajna je delovala. Pokvarjen je bil le del, ki je štel ogled strani.

Hrošč

Strežnik naše trgovine šteje obiske strani s kompleti. Da ugotovi, za kateri komplet gre, vzame drugi del poti:

self._count_view(path.strip("/").split("/")[1] if path.count("/") >= 2 else "")

Za /kits/studio/ je to studio. Za sam katalog, /kits/, ima pot dve poševnici, zato jo je zaščitni mehanizem spustil naprej, a po odstranitvi poševnic ostane le en del, [1] pa je sprožil IndexError. Obdelovalnik je Pythonov standardni http.server: izjema v do_GET zapre povezavo brez odgovora, Cloudflare pa obiskovalcu prikaže 502.

Popravek je ena majhna funkcija, ki vrne prazen niz, kadar del manjka. Števec ogledov je potreboval le ime kompleta; nikoli ni potreboval možnosti, da pokvari stran, ki jo je štel.

Zakaj to ni videlo nobeno od naših preverjanj

Kaj se je spremenilo

Ključna ugotovitev

Stranska opravila v obravnavi zahtev, kot so štetje, beleženje ali sledenje, nikoli ne smejo povzročiti napake zahteve, preverjanje strani, ki zajema samo strani, ki ste jih pravkar spremenili, pa spregleda tiste, ki nanje kažejo. Varuh v Night Watch prevzame poljuben seznam strani, vsaka z besedilom, ki ga mora vsebovati, ne le domače strani.

Posodobljeno: