A látogatószámláló, amely 502-re fordította a katalógusunkat

Szállítás

Az az oldal, amely a kínálatunkban lévő összes csomagot felsorolja, az indulás után körülbelül 41 órán át minden látogatóra 502 Bad Gateway választ adott. Az egyes csomagok saját oldala működött, a kezdőlap működött, a pénztár működött. A hibás rész néhány sor volt, amely az oldalletekintéseket számolta.

A hiba

A boltunk szervere megszámolja a csomagoldalak látogatottságát. Annak megállapításához, hogy egy kérés melyik csomagra vonatkozik, az útvonal második részét vette:

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

A /kits/studio/ esetén ez studio. Maga a katalógus, /kits/, két perjelet tartalmaz, így a biztonsági korlát átengedte, de a perjelek eltávolítása után csak egy rész marad, és a [1] IndexError-t dobott. A kezelő a Python szabványos http.server modulja: a do_GET függvényben fellépő kivétel válasz nélkül zárja le a kapcsolatot, és a Cloudflare 502-t mutatott a látogatónak.

A javítás egy kis függvény, amely üres karakterláncot ad vissza, ha a rész hiányzik. A látogatószámlálónak csak a csomag neve kellett; soha nem kellett volna elrontania azt az oldalt, amelyet éppen számolt.

Miért nem látta ezt egyetlen ellenőrzésünk sem

Mi változott

A tanulság

Az olyan mellékes feladatok, mint a számlálás, naplózás vagy követés, a kéréskezelőben soha nem okozhatnak hibát a kérésben, és egy olyan oldalellenőrzés, amely csak az éppen módosított oldalakat fedi le, kihagyja azokat, amelyek hivatkoznak rájuk. A Night Watch őrszem bármilyen oldallistát fogad, mindegyikhez megadva a kötelező szöveget, nem csak a kezdőoldalakat.

Frissítve: