Võtke ühendust toega

Vastame e-postiga, tavaliselt kahe päeva jooksul.

Väärkasutuse vältimiseks kontrollib seda saadetist Google reCAPTCHA. Seejuures edastatakse andmeid Googlele. Skript laaditakse alles selle vormi avamisel.

← Kõik postitused

Lehe aadress, mis oli veerust pikem

Sisust ja selle ülevaatamisest

Selles artiklis

9. augustil 2026 ei renderdunud kakskümmend loenduripilti. Mitte ei joonistunud valesti, mitte ei joonistunud aeglaselt — külastaja ei saanud loenduri asemele üldse midagi.

Põhjus oli lehe aadress, mis oli pikem kui 255 märki. Nüüd lõigatakse see kirjutamise hetkel ära ja loenduripilt ei sõltu enam aadressi pikkusest, millest talle teatatakse.

Ahel

Veerg, mis salvestab, millisele lehele külastus maandus, on varchar(255). Aadress saabus sellest pikemana. Lisamine ebaõnnestus veaga SQLSTATE 22001, andmed liiga pikad veeru jaoks, mis tõstis selles koodis erandi.

Ja statistika kirjutamine toimub enne pildi joonistamist. Seega erand ei kaotanud ainult ühte statistikarida. See katkestas päringu ja see päring oli see, mis loenduripildi toodab. Pika aadressiga leht rikkus vaikselt oma loenduri iga külastaja jaoks.

veergvarchar(255)lisamine ebaõnnestubSQLSTATE 22001erandkatkestab päringukülastaja ei saa loenduripilti

Pikad aadressid ei ole haruldased. Pesastatud teedega galerii, pood, mille aadressile reklaamiplatvorm lisab tosina jälgimisparameetri, otsingutulemuste leht — mis tahes neist ületab 255 märki ilma pingutuseta.

Parandus ja parandus, mida ei valitud

Aadress lõigatakse nüüd enne lisamist veeru laiuseni. Väga pika URL-i kakskümmend märki lähevad lehtede loendist kaduma; midagi muud ei muutu.

Alternatiiv oli veergu laiendada. See lükati tagasi: pole laiust, mida ei saaks ületada, ja suurema arvu valimine nihutab sama tõrke lihtsalt kaugemale, kus seda on saabudes raskem ära tunda. Tõrkerežiim peab lõpetama surmav olemast, mitte muutuma harvemaks.

Lisamise ümber try/catch-ploki panemine oleks samuti parandanud nähtava sümptomi ja oleks olnud hullem: loendur joonistuks, rida kaoks vaikselt ja lehtede loendist puuduksid just kõige keerulisemate aadressidega lehed, igaveseks, ilma et ükski logi seda mainiks.

Kaks asja, mida meeles pidada

Võõras sisend tuleb lõigata veeru laiuseni, mitte loota, et see mahub. Kõik, mis tuleb väljastpoolt — aadress, viitaja, kasutajaagent, pealkiri — on nii pikk, kui keegi teine otsustas, ja andmebaasil on selle kohta arvamus, mida ta väljendab keeldumisega.

Teadke, mis veel on tõrke järel. See oli statistikaviga statistikateenuses ja nähtav kahju oli puuduv pilt. Kirjutamine ja renderdamine jagasid päringut; miski koodis ei öelnud, et need on seotud, ja miski ei hoiatanud, et ebaõnnestunud lisamine viib pildi kaasa.

Kakskümmend katkist pilti päevas on vähe. See leiti logisid hoopis millegi muu pärast lugedes, mis ongi nende leidmise tavaline viis, ja see on põhjus neid edasi lugeda.

Reklaam