Raportul se deschide în browser, parametrii sunt randați, iar butonul de export produce o eroare, o descărcare goală sau un fișier pe care foaia de calcul refuză să îl deschidă. Această combinație are o formă standard. O pagină de raport funcțională a testat randarea și autentificarea și nimic altceva. Exportul este o cerere separată cu propriul răspuns, iar printr-un portal fără client trece și printr-un strat de rescriere care nu a fost niciodată proiectat pentru descărcări de fișiere.

Două căi, o pagină funcțională

Randarea și exportul sunt operațiuni diferite chiar și atunci când pornesc de la același buton. Serverul de rapoarte randează pagina pentru un browser și randează exportul printr-o altă extensie de ieșire, cu propriul tip de conținut și propriul comportament la eroare, așa cum descrie documentația de export. Un portal care o lasă să treacă perfect pe prima poate totuși strica a doua, pentru că a doua este un răspuns pe care portalul nu se aștepta să îl vadă. Cele două împart o sesiune și o adresă, și aproape nimic altceva.

Tratați pagina funcțională doar ca dovadă a autentificării și a accesibilității. Dovedește că contul poate ajunge la serverul de rapoarte și că portalul redirecționează HTML. Nu spune nimic despre răspunsuri de fișiere, anteturi de plasare a conținutului sau redirecționări care se termină într-o descărcare, nu într-un document.

Acesta este întregul motiv pentru a compara calea de export separat, în loc să retestați pagina care funcționează deja. Două cereri care împart o sesiune rămân două cereri.

Trei condiții care decid unde se rupe exportul

Trei întrebări localizează defectul rapid, iar fiecare răspuns indică un alt proprietar.

În primul rând, același raport, cont și format se exportă corect din rețeaua internă? Dacă da, serverul de rapoarte și randatorul său sunt în regulă, iar diferența este în calea de acces. În al doilea rând, răspunsul eșuat poartă un tip de conținut de fișier sau o pagină HTML cu o extensie de fișier? Asta separă o eroare a randatorului de o substituție făcută de portal. În al treilea rând, portalul rescrie URL-ul cererii sau elimină anteturi din răspuns? Un URL rescris poate ajunge pe un punct final complet diferit.

Răspundeți la toate trei înainte de a schimba orice setare, pentru că fiecare are un remediu diferit. O eroare a randatorului aparține serverului de rapoarte, un corp substituit aparține portalului, iar un antet eliminat este o problemă de politică, nu un bug.

Notați răspunsurile. Un caz de suport construit din acele trei linii valorează zece capturi de ecran.

Citiți răspunsul de export, nu codul de stare

Un status HTTP reușit dovedește doar că ceva a răspuns cererii. Inspectați corpul și anteturile împreună, pentru că defectul interesant este un răspuns reușit cu conținutul greșit.

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

Descărcarea anteturilor arată tipul de conținut și orice plasare a conținutului returnată de portal. Comanda file identifică ce este de fapt corpul, iar un fișier text acolo unde se aștepta o foaie de calcul este clasica pagină de conectare substituită. Comanda head arată suficient pentru a recunoaște HTML fără a vărsa un raport întreg într-un terminal.

Eliminați cookie-urile de sesiune și tokenurile înainte de a partaja orice parte din asta. O captură a unui export funcțional este o dovadă utilă, iar o captură a unei sesiuni care aparține altcuiva este un incident.

Limitați excepția la aplicație, nu la cont

Dacă portalul rescrie sau blochează răspunsul, reparația tentantă este să exonerați întregul site sau să faceți raportul anonim. Ambele repară descărcarea și elimină motivul pentru care portalul există. O excepție limitată numește o cale de aplicație, un tip de conținut și o direcție, și rămâne revizuibilă de cel care deține politica.

Folosiți versiunea de gateway pe care o rulați efectiv și setările sale de aplicație documentate. O opțiune pe care un furnizor a descris-o cândva ca lăsând traficul neschimbat nu este o instrucțiune generală, iar copierea ei dintr-un fir vechi de forum este modul în care o excepție temporară devine arhitectură permanentă.

Dacă excepția nu poate fi limitată atât de îngust, exportul aparține probabil căii interne cu o altă metodă de acces, nu în spatele portalului. O excepție pentru întregul site este o decizie a proprietarului portalului, nu o soluție ocolitoare pentru un singur raport.

Acceptați exportul, nu dialogul Salvare

Ultima verificare este fișierul însuși: se deschide, conține coloanele așteptate, iar totalurile sale corespund raportului pe care utilizatorul l-a aprobat.

Apariția unui dialog Salvare nu este succes, iar un fișier care se deschide cu un avertisment de reparare nici nu este succes. Comparați un număr de rânduri și o valoare cunoscută cu raportul de pe ecran, pentru că un export trunchiat trece orice test care se uită doar la dimensiunea fișierului. Apoi exportați a doua oară, pentru că un strat de cache care servește o dată corpul greșit poate servi corpul corect la următoarea încercare.

Acceptați fluxul de lucru de care avea nevoie utilizatorul, și nimic mai puțin. O descărcare care se deschide în aplicația greșită rămâne un export eșuat.

Articole similare