Dev Tools & Workflow

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

The Wux Webtools Team The Wux Webtools Team 12 min čítania Pomocou AI, kontrolované človekom
Split-screen illustration showing terminal with HTTP headers on left and browser network panel on right
Obsah
  1. Problém s ladením HTTP v produkcii
  2. curl: základ
  3. httpie: curl s lepšími predvolenými nastaveniami
  4. Browser DevTools: karta Network
  5. mitmproxy: zachytávajúci proxy
  6. webpagetest: pohľad z produkcie
  7. Keď hlavičky klamú
  8. Problém so slučkou presmerovaní
  9. Čo skontrolovať ako prvé
  10. Kľúčové zhrnutie
  11. FAQ
  12. Sources

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í:

  1. 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í.
  1. 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.
  1. 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-Control a Expires, aby ste zistili, ako dlho si prehliadač bude presmerovanie pamätať.
  1. 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á.
  1. Č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 -v ukáž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
  • mitmproxy ukáž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

Decision tree for choosing curl, httpie, DevTools, mitmproxy, or WebPageTest based on the HTTP debugging problem
InfographicChoose the right HTTP debugging tool — A quick route from the symptom to the tool most likely to expose the raw HTTP conversation
Comparison table showing five HTTP debugging tools, what each is best for, and its main tradeoff
InfographicHTTP debugging tools compared — Each tool exposes a different layer of the request, from raw headers to real-user timing
Diagram of a redirect loop where a CDN redirects to the origin and the origin redirects back to the CDN
InfographicAnatomy of a redirect loop — Redirect loops usually come from two layers disagreeing about the canonical URL

Často kladené otázky

Prečo curl ukazuje iné hlavičky než prehliadač?
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.
Ako odladím presmerovanie, ktoré sa deje iba niektorým používateľom?
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.
Aký je rozdiel medzi presmerovaniami 301 a 302?
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.
Prečo moje presmerovanie funguje v curl, ale nie v prehliadači?
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.
Ako zistím, aké hlavičky pridáva CDN?
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.

Zdroje a ďalšie čítanie

  1. curl documentation
  2. HTTPie documentation
  3. MDN Web Docs: HTTP redirections
  4. WebPageTest documentation
O autorovi
The Wux Webtools Team

Posledná aktualizácia:

Pokračujte v čítaní