Izveštaj se otvara u pregledaču, parametri se renderuju, a dugme za izvoz proizvodi grešku, prazno preuzimanje ili datoteku koju tabela odbija da otvori. Ta kombinacija ima standardan oblik. Radna stranica izveštaja testirala je renderovanje i autentifikaciju i ništa drugo. Izvoz je odvojen zahtev sa sopstvenim odgovorom, a kroz portal bez klijenta prolazi i kroz sloj prepisivanja koji nikada nije bio projektovan za preuzimanja datoteka.

Dva puta, jedna radna stranica

Renderovanje i izvoz su različite operacije čak i kada počinju sa istog dugmeta. Server izveštaja renderuje stranicu za pregledač i priprema izvoz kroz drugo izlazno proširenje sa sopstvenim tipom sadržaja i sopstvenim ponašanjem pri grešci, kako opisuje dokumentacija za izvoz. Portal koji prvo propušta besprekorno ipak može da unakazi drugo, jer drugo je odgovor koji portal nije očekivao da vidi. Dvoje dele sesiju i adresu, i gotovo ništa drugo.

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

To je ceo razlog da se put izvoza uporedi zasebno, umesto da se ponovo testira stranica koja već radi. Dva zahteva koja dele sesiju i dalje su dva zahteva.

Tri uslova koja odlučuju gde se izvoz lomi

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

Prvo, da li se isti izveštaj, račun i format ispravno izvoze iz interne mreže? Ako izvoze, server izveštaja i njegov renderer su u redu, a razlika je u putu pristupa. Drugo, da li neuspeli odgovor nosi tip sadržaja datoteke, ili HTML stranicu sa nastavkom datoteke? To razdvaja grešku renderera od zamene koju je napravio portal. Treće, da li portal prepisuje URL zahteva ili uklanja zaglavlja iz odgovora? Prepisani URL može da stigne na sasvim drugu krajnju tačku.

Odgovorite na sva tri pre nego što promenite postavku, jer svako ima drugačiji lek. Kvar renderera pripada serveru izveštaja, zamenjeno telo pripada portalu, a uklonjeno zaglavlje je pitanje politike, a ne greška.

Zapišite odgovore. Zahtev za podršku sastavljen od tih tri reda vredi deset snimaka ekrana.

Čitajte odgovor izvoza, a ne statusni kod

HTTP status uspeha dokazuje samo da je nešto odgovorilo na zahtev. Pregledajte telo i zaglavlja zajedno, jer zanimljiv kvar je uspešan odgovor sa 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 identifikuje šta telo zapravo jeste, a tekstualna datoteka tamo gde se očekuje tabela klasična je zamenjena stranica za prijavu. Naredba head pokazuje dovoljno da prepoznate HTML bez izbacivanja celog izveštaja u terminal.

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

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

Ako portal prepisuje ili blokira odgovor, primamljiv popravak je izuzeti celu lokaciju ili učiniti izveštaj anonimnim. Oboje popravlja preuzimanje i uklanja razlog zbog kojeg portal postoji. Suzani izuzetak imenuje jednu putanju aplikacije, jedan tip sadržaja i jedan smer, i ostaje pregledan onome koji poseduje politiku.

Koristite verziju mrežnog prolaza koju zaista pokrećete i njegove dokumentovane postavke aplikacije. Opcija koju je dobavljač nekada opisao kao onu koja ostavlja promet nepromenjen nije opšte uputstvo, a kopiranje iz stare forumske teme put je da privremeni izuzetak postane trajna arhitektura.

Ako se izuzetak ne može tako usko suziti, izvoz verovatno pripada internom putu sa drugačijim načinom pristupa, a ne iza portala. Izuzimanje cele lokacije odluka je za vlasnika portala, a ne zaobilaznica za jedan izveštaj.

Prihvatite izvoz, a ne dijalog za čuvanje

Poslednja provera je sama datoteka: otvara se, sadrži očekivane kolone, a njeni zbrojevi odgovaraju izveštaju koji je korisnik odobrio.

Pojava dijaloga za čuvanje nije uspeh, a datoteka koja se otvara sa upozorenjem o popravci takođe nije uspeh. Uporedite broj redova i jednu poznatu vrednost sa izveštajem na ekranu, jer skraćeni izvoz prolazi svaki test koji gleda samo veličinu datoteke. Zatim izvezite drugi put, jer sloj keša koji jednom posluži pogrešno telo može sledeć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 neuspeo izvoz.

Povezani članci