Malá sada nástrojov na ladenie presmerovaní a hlavičiek HTTP v produkcii
Päť nástrojov príkazového riadka a techník v prehliadači, ktoré ukážu, čo sa medzi klientom a serverom skutočne deje
Obsah
Problém s ladením HTTP v produkcii
Väčšina problémov s HTTP je v prehliadači neviditeľná. Reťazec presmerovaní zlyhá potichu, hlavička cache sa líši o jeden znak, pravidlá CORS zablokujú požiadavku bez vysvetlenia. Vývojárske nástroje prehliadača vám ukážu výsledok komunikácie, ale často skryjú surovú výmenu, ktorá problém spôsobila.
Najdôležitejšie je to v produkcii, kde nemôžete pridať logovanie ani reštartovať služby, aby ste zistili, čo sa zmenilo. Potrebujete nástroje, ktoré ukážu skutočnú HTTP komunikáciu: hlavičky požiadaviek, hlavičky odpovedí, stavové kódy, ciele presmerovaní, časovanie. Tu je päť nástrojov, ktoré túto úlohu spoľahlivo zvládajú, plus techniky v prehliadači, ktoré ich dopĺňajú.
curl: základ
curl je prvý nástroj, po ktorom treba siahnuť, pretože ukáže presne to, čo server odoslal, bez interpretácie prehliadačom medzi tým.
Ak chcete vidieť hlavičky odpovede bez tela:
curl -I https://example.com
Ak chcete nasledovať presmerovania a vidieť každý krok:
curl -L -v https://example.com
Príznak -v (verbose) zobrazí celú požiadavku aj odpoveď vrátane všetkých hlavičiek. Príznak -L automaticky nasleduje presmerovania. Spolu vám ukážu celý reťazec presmerovaní, čo je miesto, kde sa nachádza väčšina produkčných problémov.
Ak chcete vidieť iba cieľové adresy presmerovaní:
curl -s -o /dev/null -w "%{http_code} %{redirect_url}\n" -L https://example.com
Je to užitočné, keď potrebujete overiť reťazec presmerovaní bez šumu úplných hlavičiek. Príznak -w formátuje výstup tak, aby zobrazil iba stavový kód a nasledujúcu URL v reťazci.
curl vám tiež umožňuje odosielať vlastné hlavičky, čo je nevyhnutné pri testovaní správania CDN, autentifikácie alebo API endpointov:
curl -H "Authorization: Bearer token" -H "Accept: application/json" https://api.example.com
httpie: curl s lepšími predvolenými nastaveniami
httpie je nástroj v Pythone, ktorý robí to isté ako curl, ale so syntaxou, ktorá sa ľahšie pamätá, a výstupom, ktorý sa ľahšie číta. Nie je to náhrada — curl je výkonnejší a rozšírenejší — ale na rýchle kontroly je httpie rýchlejší.
Ak chcete vidieť hlavičky:
http HEAD https://example.com
Ak chcete nasledovať presmerovania:
http --follow --all https://example.com
Príznak --all zobrazí každú odpoveď v reťazci presmerovaní, nielen tú finálnu. Je to ekvivalent curl -L -v, ale výstup je farebne odlíšený a ľahšie sa prechádza.
Ak chcete odoslať JSON:
http POST https://api.example.com name=value
httpie predvolene predpokladá JSON, čo šetrí písanie pri testovaní API. Odpoveď tiež formátuje prehľadne, vďaka čomu sa ľahšie odhalia chybne vytvorené hlavičky alebo neočakávané hodnoty.
Browser DevTools: karta Network
Karta Network v prehliadači je miesto, kde by ste mali začať, ak sa problém deje iba v prehliadači. Ukazuje tie isté informácie ako curl, ale zároveň ukazuje interpretáciu prehliadača: či požiadavku zablokoval, ako narábal s cache, či odoslal cookies.
Ak chcete vidieť úplné hlavičky požiadavky a odpovede, kliknite na ľubovoľnú požiadavku na karte Network a potom sa pozrite do sekcie Headers. Zobrazenie "Raw" ukazuje hlavičky presne tak, ako boli odoslané, bez formátovania.
Ak chcete vidieť reťazce presmerovaní, hľadajte požiadavky so stavovými kódmi 3xx. Prehliadač ich zoskupuje pod finálnu požiadavku, ale môžete ich rozbaliť a vidieť každý krok. Tu nájdete slučky presmerovaní, chýbajúce hlavičky Location alebo presmerovania smerujúce na nesprávnu doménu.
Ak chcete vidieť časovanie, pozrite sa na kartu Timing pri ľubovoľnej požiadavke. Ukáže, koľko času prehliadač strávil DNS vyhľadávaním, TCP pripojením, TLS handshake a čakaním na server. Ak je presmerovanie pomalé, karta časovania vám povie, či je problém v sieťovej latencii alebo v spracovaní na serveri.
Jedno obmedzenie: prehliadač z bezpečnostných dôvodov skrýva niektoré hlavičky. Hlavičky Set-Cookie sú viditeľné, ale skutočné hodnoty cookies sú redigované. Hlavičky Authorization sú niekedy skryté úplne. Ak ich potrebujete vidieť, použite curl.
mitmproxy: zachytávajúci proxy
mitmproxy je nástroj v Pythone, ktorý sedí medzi vaším prehliadačom a serverom a v reálnom čase ukazuje každú požiadavku a odpoveď. Je zložitejší než curl, ale je to jediný nástroj, ktorý ukazuje, čo prehliadač skutočne odosiela, vrátane hlavičiek, ktoré prehliadač pridáva automaticky.
Spustíte ho takto:
mitmproxy
Potom nakonfigurujte prehliadač tak, aby používal localhost:8080 ako HTTP proxy. mitmproxy vám v terminálovom rozhraní ukáže každú požiadavku. Môžete kontrolovať hlavičky, upravovať požiadavky pred ich odoslaním alebo prehrávať požiadavky s inými parametrami.
Je to užitočné pri ladení problémov, ktoré sa dejú iba v prehliadači: CORS preflight požiadavky, práca s cookies alebo požiadavky, ktoré zlyhajú, keď sú prítomné určité hlavičky. Je to užitočné aj pri testovaní, ako sa váš web správa za firemným proxy alebo VPN, pretože mitmproxy dokáže takéto prostredia simulovať.
Nevýhodou je zložitejšie nastavenie. Musíte nainštalovať koreňový certifikát, aby mitmproxy dokázal zachytávať HTTPS prevádzku, a musíte nakonfigurovať prehliadač na používanie proxy. Na rýchle kontroly je curl rýchlejší. Na hlboké ladenie sa mitmproxy oplatí nastaviť.
webpagetest: pohľad z produkcie
WebPageTest je bezplatná služba, ktorá načíta vašu stránku zo skutočných prehliadačov v rôznych lokalitách a ukáže celú HTTP komunikáciu. Je pomalšia než curl, ale ukazuje, čo zažívajú skutoční používatelia, vrátane správania CDN, DNS rozlíšenia a TLS vyjednávania.
Zobrazenia "Request Headers" a "Response Headers" ukazujú presne to, čo prehliadač odoslal a prijal. Zobrazenie "Waterfall" ukazuje časovanie každej požiadavky vrátane presmerovaní. Tu nájdete problémy, ktoré sa dejú iba v určitých regiónoch alebo na určitých sieťach.
WebPageTest tiež ukazuje reťazec presmerovaní pre hlavný dokument, čo je miesto, kde sa nachádza väčšina problémov s presmerovaniami. Ak váš web presmeruje z http:// na https://, potom z www. na non-www. a potom z / na /en/, WebPageTest vám ukáže všetky tri kroky aj to, ako dlho každý z nich trval.
Pre nástroje, ktoré vám pomôžu overiť a optimalizovať tieto HTTP základy, Wux Webtools ponúka niekoľko utilít, ktoré bežia celé vo vašom prehliadači, vrátane analyzátorov hlavičiek a kontrol presmerovaní, ktoré rešpektujú vaše súkromie tým, že všetko spracúvajú na strane klienta.
Keď hlavičky klamú
Najťažšie HTTP problémy sú tie, pri ktorých server odosiela protichodné hlavičky. Hlavička Cache-Control hovorí no-cache, ale hlavička Expires hovorí, že zdroj je platný rok. Hlavička Location smeruje na relatívnu URL, ale hlavička Content-Location smeruje inde. Prehliadač musí odhadnúť, ktorej veriť, a rôzne prehliadače odhadujú rôzne.
Keď sa to stane, potrebujete vidieť surové hlavičky v poradí, v akom ich server odoslal. curl -v to dokáže. Rovnako aj mitmproxy. DevTools v prehliadači niekedy menia poradie hlavičiek kvôli čitateľnosti, čím problém skryjú.
Ďalší častý problém: hlavičky, ktoré pridáva CDN alebo load balancer, nie vaša aplikácia. Ak ladíte problém s cache, potrebujete vedieť, či hlavička Cache-Control prišla z vašej aplikácie alebo z CDN. curl vám ukáže finálny výsledok, ale nepovie, odkiaľ ktorá hlavička prišla. Na to musíte obísť CDN (priamym zásahom origin servera) a hlavičky porovnať.
Problém so slučkou presmerovaní
Slučky presmerovaní sú najčastejší HTTP problém v produkcii. Vznikajú, keď sa dva servery nezhodnú na tom, kam má URL smerovať: CDN presmeruje na origin, origin presmeruje späť na CDN. Alebo load balancer presmeruje HTTP na HTTPS, no aplikácia presmeruje HTTPS späť na HTTP, pretože nevidí hlavičku X-Forwarded-Proto.
Na ladenie potrebujete vidieť celý reťazec presmerovaní vrátane hlavičky Location v každom kroku. curl -L -v to dokáže, ale po 50 presmerovaniach sa zastaví, aby zabránil nekonečným slučkám. Ak narážate na tento limit, máte slučku presmerovaní.
Oprava je zvyčajne zmena konfigurácie: povedzte aplikácii, aby dôverovala hlavičke X-Forwarded-Proto, alebo povedzte CDN, aby prestala presmerúvať požiadavky, ktoré už sú HTTPS. Nemôžete to však opraviť, kým slučku neuvidíte, a prehliadač vám pred tým, než to vzdá, neukáže viac než niekoľko presmerovaní.
Čo skontrolovať ako prvé
Keď sa niečo pokazí v produkcii, skontrolujte tieto veci v poradí:
- Stavový kód: Je taký, aký ste očakávali? 301 je trvalý, 302 je dočasný, 307 zachováva HTTP metódu. Ak vidíte nesprávny kód, problém je vo vašej konfigurácii presmerovaní.
- Hlavička Location: Smeruje na správne miesto? Je to absolútna URL alebo relatívna? Relatívne URL sa vyhodnocujú voči aktuálnej URL, čo môže priniesť neočakávané výsledky, ak základná URL nie je taká, ako si myslíte.
- Hlavičky cache: Ukladá prehliadač presmerovanie do cache? Presmerovanie 301 sa predvolene ukladá do cache, čo znamená, že nesprávne nakonfigurované presmerovanie môže rozbiť váš web na hodiny aj po tom, ako ho opravíte. Skontrolujte hlavičky
Cache-ControlaExpires, aby ste zistili, ako dlho si prehliadač bude presmerovanie pamätať.
- Hlavičky CORS: Ak je požiadavka cross-origin, odosiela server správnu hlavičku
Access-Control-Allow-Origin? Ak nie, prehliadač požiadavku zablokuje a v konzole uvidíte chybu CORS. Hlavičky odpovede servera sú jediné miesto, kde to môžete opraviť — v prehliadači sa to obísť nedá.
- Časovanie: Ako dlho požiadavka trvala? Ak je pomalá, ide o sieťovú latenciu alebo spracovanie na serveri? DevTools v prehliadači aj WebPageTest ukazujú rozpisy časovania, ktoré povedia, kam sa čas stratil.
Pre hlbší pohľad na to, ako sa správanie prehliadačov zmenilo v oblasti súkromia a hlavičiek, si pozrite čo sa zmenilo pre cookies v roku 2026 a čo s tým robiť, kde sú opísané dôsledky nedávnych aktualizácií prehliadačov pre hlavičky a súhlas.
Kľúčové zhrnutie
curl -L -vukáže celý reťazec presmerovaní a všetky hlavičky bez interpretácie prehliadačom- Karta Network v prehliadači ukáže, čo prehliadač s odpoveďou urobil, vrátane rozhodnutí o cache a CORS
mitmproxyukáže, čo prehliadač odoslal, vrátane hlavičiek, ktoré prehliadač pridáva automaticky- WebPageTest ukáže, čo zažívajú skutoční používatelia, vrátane správania CDN a regionálnych rozdielov
- Slučky presmerovaní a protichodné hlavičky sú najčastejšie produkčné problémy a bez kontroly surového HTTP sú neviditeľné
FAQ
Q: Prečo curl ukazuje iné hlavičky než prehliadač?
A: Pretože prehliadač automaticky pridáva hlavičky (User-Agent, Accept, Cookie) a riadi sa vlastnými pravidlami pre cache a CORS. curl odosiela iba to, čo mu poviete odoslať. Ak chcete vidieť, čo prehliadač skutočne odosiela, použite mitmproxy alebo DevTools v prehliadači.
Q: Ako odladím presmerovanie, ktoré sa deje iba niektorým používateľom?
A: Skontrolujte, či presmerovanie závisí od hlavičiek, ktoré používateľ odosiela: User-Agent, Accept-Language, Cookie alebo IP adresa (cez X-Forwarded-For). Použite curl na odoslanie tých istých hlavičiek, ktoré odoslal používateľ, alebo použite WebPageTest na načítanie stránky z lokality používateľa.
Q: Aký je rozdiel medzi presmerovaniami 301 a 302?
A: 301 je trvalé a hovorí prehliadaču, aby si presmerovanie uložil do cache (niekedy navždy). 302 je dočasné a hovorí prehliadaču, aby ho do cache neukladal. Ak si nie ste istí, ktoré použiť, použite 302 — neskôr ho vždy môžete zmeniť na 301.
Q: Prečo moje presmerovanie funguje v curl, ale nie v prehliadači?
A: Pravdepodobne preto, že prehliadač má v cache staré presmerovanie, alebo preto, že prehliadač presmerovanie blokuje kvôli pravidlám CORS alebo mixed content. Skontrolujte konzolu DevTools v prehliadači, či neobsahuje chyby, a skontrolujte hlavičky Cache-Control, aby ste zistili, či prehliadač používa odpoveď z cache.
Q: Ako zistím, aké hlavičky pridáva CDN?
A: Použite curl na zásah CDN URL a potom znova použite curl na priamy zásah origin servera (s obídením CDN). Porovnajte hlavičky. Tie, ktoré sa objavia iba v prvej odpovedi, prišli z CDN.
<!-- tool-cta:start -->
💡 Vyskúšajte toto: Pri hľadaní problémov s presmerovaniami Redirect Checker sleduje celý reťazec a zobrazuje stavové kódy a hlavičky pri každom kroku.
<!-- tool-cta:end -->
Sources
- curl documentation — Oficiálna referencia možností príkazového riadka a správania curl
- HTTPie documentation — Sprievodca syntaxou a funkciami httpie
- MDN Web Docs: HTTP redirections — Komplexné vysvetlenie stavových kódov a správania HTTP presmerovaní
- WebPageTest documentation — Ako interpretovať výsledky a hlavičky vo WebPageTest


