Izvještaj se otvara u pregledniku, parametri se renderiraju, a gumb za izvoz proizvodi grešku, prazno preuzimanje ili datoteku koju tablica odbija otvoriti. Ta kombinacija ima standardan oblik. Radna stranica izvještaja testirala je renderiranje i autentifikaciju i ništa drugo. Izvoz je zaseban zahtjev s vlastitim odgovorom, a kroz portal bez klijenta prolazi i kroz sloj prepisivanja koji nikada nije bio projektiran za preuzimanja datoteka.

Dva puta, jedna radna stranica

Renderiranje i izvoz različite su operacije čak i kad počinju s istog gumba. Server izvještaja renderira stranicu za preglednik i priprema izvoz kroz drugo izlazno proširenje s vlastitim tipom sadržaja i vlastitim ponašanjem pri grešci, kako opisuje dokumentacija za izvoz. Portal koji prvo propušta besprijekorno ipak može unakaziti drugo, jer drugo je odgovor koji portal nije očekivao vidjeti. Dvoje dijele sesiju i adresu, i gotovo ništa drugo.

Tretirajte radnu stranicu samo kao dokaz autentifikacije i dostupnosti. Ona dokazuje da račun može doći do servera izvještaja i da portal prosljeđuje HTML. Ne govori ništa o odgovorima s datotekama, zaglavljima rasporeda sadržaja ili preusmjeravanjima koja završavaju preuzimanjem, a ne dokumentom.

To je cijeli razlog da se put izvoza usporedi zasebno, umjesto da se ponovno testira stranica koja već radi. Dva zahtjeva koja dijele sesiju i dalje su dva zahtjeva.

Tri uvjeta koja odlučuju gdje se izvoz lomi

Tri pitanja brzo smještaju kvar, a svaki odgovor pokazuje na drugog vlasnika.

Prvo, izvozi li se isti izvještaj, račun i format ispravno iz interne mreže? Ako izvozi, server izvještaja i njegov renderer u redu su, a razlika je u putu pristupa. Drugo, nosi li neuspjeli odgovor tip sadržaja datoteke, ili HTML stranicu s nastavkom datoteke? To razdvaja grešku renderera od zamjene koju je napravio portal. Treće, prepisuje li portal URL zahtjeva ili uklanja zaglavlja iz odgovora? Prepisani URL može stići na posve drugu krajnju točku.

Odgovorite na sva tri prije nego što promijenite postavku, jer svako ima drugačiji lijek. Kvar renderera pripada serveru izvještaja, zamijenjeno tijelo pripada portalu, a uklonjeno zaglavlje pitanje je politike, a ne greška.

Zapišite odgovore. Zahtjev za podršku sastavljen od tih tri reda vrijedi deset snimaka zaslona.

Čitajte odgovor izvoza, a ne statusni kod

HTTP status uspjeha dokazuje samo da je nešto odgovorilo na zahtjev. Pregledajte tijelo i zaglavlja zajedno, jer zanimljiv kvar je uspješan odgovor s pogrešnim sadržajem.

curl -sS -D export.headers -o export.bin --location "https://portal.example.com/reports/export?format=xlsx"
file export.bin
head -c 300 export.bin

Ispis zaglavlja pokazuje tip sadržaja i svaki raspored sadržaja koji je portal vratio. Naredba file identificira što tijelo zapravo jest, a tekstualna datoteka tamo gdje se očekuje tablica klasična je zamijenjena stranica za prijavu. Naredba head pokazuje dovoljno da prepoznate HTML bez izbacivanja cijelog izvještaja u terminal.

Uklonite kolačiće sesije i tokene prije nego što bilo što od toga podijelite. Snimak radnog izvoza koristan je dokaz, a snimak sesije koja pripada nekome drugom incident je.

Ograničite iznimku na aplikaciju, ne na račun

Ako portal prepisuje ili blokira odgovor, primamljiv popravak je izuzeti cijelu lokaciju ili učiniti izvještaj anonimnim. Oboje popravlja preuzimanje i uklanja razlog zbog kojeg portal postoji. Suzana iznimka imenuje jednu putanju aplikacije, jedan tip sadržaja i jedan smjer, i ostaje pregledna onome koji posjeduje politiku.

Koristite verziju mrežnog prolaza koju zaista pokrećete i njegove dokumentirane postavke aplikacije. Opcija koju je dobavljač nekada opisao kao onu koja ostavlja promet nepromijenjen nije opća uputa, a kopiranje iz stare forumske teme put je da privremena iznimka postane trajna arhitektura.

Ako se iznimka ne može tako usko suziti, izvoz vjerojatno pripada internom putu s drugačijim načinom pristupa, a ne iza portala. Izuzimanje cijele lokacije odluka je za vlasnika portala, a ne zaobilaznica za jedan izvještaj.

Prihvatite izvoz, a ne dijalog za spremanje

Posljednja provjera je sama datoteka: otvara se, sadrži očekivane stupce, a njezini zbrojevi odgovaraju izvještaju koji je korisnik odobrio.

Pojava dijaloga za spremanje nije uspjeh, a datoteka koja se otvara s upozorenjem o popravku također nije uspjeh. Usporedite broj redaka i jednu poznatu vrijednost s izvještajem na zaslonu, jer skraćeni izvoz prolazi svaki test koji gleda samo veličinu datoteke. Zatim izvezite drugi put, jer sloj predmemorije koji jednom posluži pogrešno tijelo može sljedeći put poslužiti ispravno.

Prihvatite radni tok koji je korisniku trebao, i ništa manje od toga. Preuzimanje koje se otvori u pogrešnoj aplikaciji i dalje je neuspjeli izvoz.

Povezani članci