Š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
- Nadzor razpoložljivosti je odpiral samo domače strani. Domača stran je bila v redu.
- Korak izdaje je preveril vsak komplet, ki ga je poslal: njegovo stran, preusmeritev na blagajno, plačljivo pot od začetka do konca. Nikoli ni odprl seznama vseh kompletov.
- Analitika tega ni mogla pokazati. Koda, ki bi štela obiskovalce kataloga, je bila tista, ki je zrušila. Strežniški dnevnik je ves čas imel odgovor: 17 sledi napak v teh 41 urah, vsaka je bila zahteva, od osebe ali pajka, ki je namesto strani prejela napako.
Kaj se je spremenilo
- Vsaka stran, od zunaj, vsako uro. Majhno opravilo prebere zemljevid strani in odpre vsako angleško stran ter nato eno od drugih 42 jezikov prek Cloudflarea kot obiskovalec. Dva zaporedna neuspela zagona pošljeta e-pošto; okrevanje pošlje še eno.
- Korak izdaje odpre vse angleške strani po ponovni gradnji spletnega mesta in zavrne dokončanje, če ena ne odgovori s 200.
- Indeksne strani štejejo kot strani. Strani, ki naštevajo druge strani, so tiste, do katerih obiskovalec pride prvi, in prav te nihče ni preizkusil.
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.