Dev Tools & Workflow

Mali komplet alata za otklanjanje pogrešaka u preusmjeravanjima i HTTP zaglavljima u produkciji

Pet alata naredbenog retka i tehnika u pregledniku koje pokazuju što se doista događa između klijenta i poslužitelja

The Wux Webtools Team The Wux Webtools Team 10 min čitanja Pomoć AI, pregledano od strane ljudi
Split-screen illustration showing terminal with HTTP headers on left and browser network panel on right
Sadržaj
  1. Problem s otklanjanjem pogrešaka u HTTP-u u produkciji
  2. curl: temelj
  3. httpie: curl s boljim zadanim postavkama
  4. Browser DevTools: kartica Network
  5. mitmproxy: presretajući proxy
  6. webpagetest: produkcijska perspektiva
  7. Kada zaglavlja lažu
  8. Problem petlje preusmjeravanja
  9. Što prvo provjeriti
  10. Ključni zaključci
  11. FAQ
  12. Izvori

Problem s otklanjanjem pogrešaka u HTTP-u u produkciji

Većina HTTP problema nevidljiva je u pregledniku. Lanac preusmjeravanja tiho zakaže, cache zaglavlje pogrešno je za jedan znak, CORS pravilo blokira zahtjev bez objašnjenja. Razvojni alati preglednika pokazuju rezultat razgovora, ali često skrivaju sirovu razmjenu koja je uzrokovala problem.

To je najvažnije u produkciji, gdje ne možete dodati zapisivanje u logove ili ponovno pokrenuti servise da biste vidjeli što se promijenilo. Trebaju vam alati koji pokazuju stvarni HTTP razgovor: zaglavlja zahtjeva, zaglavlja odgovora, statusne kodove, ciljeve preusmjeravanja, vremenske podatke. Ovo je pet alata koji pouzdano obavljaju taj posao, uz tehnike u pregledniku koje ih nadopunjuju.

curl: temelj

curl je prvi alat za kojim treba posegnuti jer vam pokazuje točno ono što je poslužitelj poslao, bez interpretacije preglednika između.

Za prikaz zaglavlja odgovora bez tijela:

curl -I https://example.com

Za praćenje preusmjeravanja i prikaz svakog koraka:

curl -L -v https://example.com

Zastavica -v (verbose) prikazuje cijeli zahtjev i odgovor, uključujući sva zaglavlja. Zastavica -L automatski prati preusmjeravanja. Zajedno vam pokazuju cijeli lanac preusmjeravanja, a ondje se nalazi većina produkcijskih problema.

Za prikaz samo lokacija preusmjeravanja:

curl -s -o /dev/null -w "%{http_code} %{redirect_url}\n" -L https://example.com

To je korisno kada trebate provjeriti lanac preusmjeravanja bez buke svih zaglavlja. Zastavica -w formatira izlaz tako da prikazuje samo statusni kod i sljedeći URL u lancu.

curl vam također omogućuje slanje prilagođenih zaglavlja, što je ključno za testiranje ponašanja CDN-a, autentikacije ili API krajnjih točaka:

curl -H "Authorization: Bearer token" -H "Accept: application/json" https://api.example.com

httpie: curl s boljim zadanim postavkama

httpie je Python alat koji radi ono što radi curl, ali sa sintaksom koju je lakše zapamtiti i izlazom koji je lakše čitati. Nije zamjena — curl je moćniji i šire instaliran — ali za brze provjere httpie je brži.

Za prikaz zaglavlja:

http HEAD https://example.com

Za praćenje preusmjeravanja:

http --follow --all https://example.com

Zastavica --all prikazuje svaki odgovor u lancu preusmjeravanja, a ne samo završni. To je ekvivalent naredbi curl -L -v, ali izlaz je obojen i lakši za brzo pregledavanje.

Za slanje JSON-a:

http POST https://api.example.com name=value

httpie prema zadanim postavkama pretpostavlja JSON, što štedi tipkanje kada testirate API-je. Također lijepo formatira odgovor, pa je lakše uočiti neispravno oblikovana zaglavlja ili neočekivane vrijednosti.

Browser DevTools: kartica Network

Kartica Network u pregledniku mjesto je odakle trebate krenuti ako se problem događa samo u pregledniku. Pokazuje iste informacije kao curl, ali također pokazuje interpretaciju preglednika: je li blokirao zahtjev, kako je obradio predmemoriranje, je li poslao kolačiće.

Za prikaz cijelih zaglavlja zahtjeva i odgovora kliknite bilo koji zahtjev na kartici Network, zatim pogledajte odjeljak Headers. Prikaz "Raw" pokazuje zaglavlja točno onako kako su poslana, bez formatiranja.

Za prikaz lanaca preusmjeravanja potražite zahtjeve sa statusnim kodovima 3xx. Preglednik ih grupira pod završnim zahtjevom, ali možete ih proširiti kako biste vidjeli svaki korak. Ondje ćete pronaći petlje preusmjeravanja, nedostajuća Location zaglavlja ili preusmjeravanja koja upućuju na pogrešnu domenu.

Za prikaz vremenskih podataka pogledajte karticu Timing za bilo koji zahtjev. Ona pokazuje koliko je vremena preglednik potrošio na DNS lookup, TCP vezu, TLS handshake i čekanje poslužitelja. Ako je preusmjeravanje sporo, kartica Timing kaže vam je li problem u mrežnoj latenciji ili obradi na poslužitelju.

Jedno ograničenje: preglednik skriva neka zaglavlja iz sigurnosnih razloga. Set-Cookie zaglavlja su vidljiva, ali stvarne vrijednosti kolačića su redigirane. Authorization zaglavlja ponekad su potpuno skrivena. Ako ih trebate vidjeti, upotrijebite curl.

mitmproxy: presretajući proxy

mitmproxy je Python alat koji stoji između vašeg preglednika i poslužitelja te u stvarnom vremenu prikazuje svaki zahtjev i odgovor. Složeniji je od curl, ali je jedini alat koji pokazuje što preglednik zapravo šalje, uključujući zaglavlja koja preglednik automatski dodaje.

Za pokretanje:

mitmproxy

Zatim konfigurirajte preglednik da koristi localhost:8080 kao HTTP proxy. mitmproxy će prikazati svaki zahtjev u terminalskom sučelju. Možete pregledavati zaglavlja, uređivati zahtjeve prije slanja ili ponovno slati zahtjeve s drukčijim parametrima.

To je korisno za otklanjanje pogrešaka u problemima koji se događaju samo u pregledniku: CORS preflight zahtjevi, rukovanje kolačićima ili zahtjevi koji ne uspijevaju kada su prisutna određena zaglavlja. Korisno je i za testiranje ponašanja vaše stranice iza korporativnog proxyja ili VPN-a, jer mitmproxy može simulirati takva okruženja.

Nedostatak je složenost postavljanja. Morate instalirati root certifikat kako bi mitmproxy mogao presretati HTTPS promet i morate konfigurirati preglednik da koristi proxy. Za brze provjere curl je brži. Za dubinsko otklanjanje pogrešaka mitmproxy vrijedi vremena potrebnog za postavljanje.

webpagetest: produkcijska perspektiva

WebPageTest je besplatna usluga koja učitava vašu stranicu iz stvarnih preglednika na različitim lokacijama i pokazuje cijeli HTTP razgovor. Sporija je od curl, ali pokazuje što stvarni korisnici doživljavaju, uključujući ponašanje CDN-a, DNS razrješavanje i TLS pregovaranje.

Prikazi "Request Headers" i "Response Headers" pokazuju točno što je preglednik poslao i primio. Prikaz "Waterfall" pokazuje vremenski slijed svakog zahtjeva, uključujući preusmjeravanja. Ondje ćete pronaći probleme koji se događaju samo u određenim regijama ili na određenim mrežama.

WebPageTest također pokazuje lanac preusmjeravanja za glavni dokument, gdje se nalazi većina problema s preusmjeravanjima. Ako vaša stranica preusmjerava s http:// na https://, zatim s www. na non-www., pa s / na /en/, WebPageTest vam pokazuje sva tri koraka i koliko je svaki trajao.

Za alate koji pomažu provjeriti i optimizirati ove HTTP osnove, Wux Webtools nudi nekoliko uslužnih alata koji se u cijelosti izvode u vašem pregledniku, uključujući analizatore zaglavlja i provjerivače preusmjeravanja koji poštuju vašu privatnost obradom svega na klijentskoj strani.

Kada zaglavlja lažu

Najteži HTTP problemi su oni u kojima poslužitelj šalje proturječna zaglavlja. Cache-Control zaglavlje kaže no-cache, ali Expires zaglavlje kaže da je resurs valjan godinu dana. Location zaglavlje upućuje na relativni URL, ali Content-Location zaglavlje upućuje negdje drugdje. Preglednik mora pogoditi kojemu vjerovati, a različiti preglednici pogađaju drukčije.

Kada se to dogodi, morate vidjeti sirova zaglavlja redoslijedom kojim ih je poslužitelj poslao. curl -v to radi. Isto radi i mitmproxy. Browser DevTools ponekad preuredi zaglavlja radi čitljivosti, što skriva problem.

Još jedan čest problem: zaglavlja koja dodaje CDN ili load balancer, a ne vaša aplikacija. Ako otklanjate problem s predmemoriranjem, morate znati je li Cache-Control zaglavlje došlo iz vaše aplikacije ili iz CDN-a. curl vam pokazuje konačni rezultat, ali ne govori odakle je svako zaglavlje došlo. Za to morate zaobići CDN (izravnim pogađanjem origin poslužitelja) i usporediti zaglavlja.

Problem petlje preusmjeravanja

Petlje preusmjeravanja najčešći su HTTP problem u produkciji. Događaju se kada se dva poslužitelja ne slažu oko toga kamo URL treba upućivati: CDN preusmjerava na origin, origin preusmjerava natrag na CDN. Ili load balancer preusmjerava HTTP na HTTPS, ali aplikacija preusmjerava HTTPS natrag na HTTP jer ne vidi X-Forwarded-Proto zaglavlje.

Za otklanjanje toga morate vidjeti cijeli lanac preusmjeravanja, uključujući Location zaglavlje u svakom koraku. curl -L -v to radi, ali zaustavlja se nakon 50 preusmjeravanja kako bi spriječio beskonačne petlje. Ako dosežete to ograničenje, imate petlju preusmjeravanja.

Rješenje je obično promjena konfiguracije: recite aplikaciji da vjeruje X-Forwarded-Proto zaglavlju ili recite CDN-u da prestane preusmjeravati zahtjeve koji su već HTTPS. Ali ne možete to popraviti dok ne vidite petlju, a preglednik vam neće pokazati više od nekoliko preusmjeravanja prije nego što odustane.

Što prvo provjeriti

Kada se nešto pokvari u produkciji, provjerite sljedeće ovim redoslijedom:

  1. Statusni kod: Je li onakav kakav ste očekivali? 301 je trajno, 302 je privremeno, 307 zadržava HTTP metodu. Ako vidite pogrešan kod, problem je u konfiguraciji preusmjeravanja.
  1. Location zaglavlje: Upućuje li na pravo mjesto? Je li to apsolutni URL ili relativni? Relativni URL-ovi razrješavaju se u odnosu na trenutni URL, što može dati neočekivane rezultate ako osnovni URL nije ono što mislite da jest.
  1. Cache zaglavlja: Predmemorira li preglednik preusmjeravanje? 301 preusmjeravanje predmemorira se prema zadanim postavkama, što znači da pogrešno konfigurirano preusmjeravanje može pokvariti vašu stranicu satima čak i nakon što ga popravite. Provjerite Cache-Control i Expires zaglavlja da vidite koliko dugo će preglednik pamtiti preusmjeravanje.
  1. CORS zaglavlja: Ako je zahtjev cross-origin, šalje li poslužitelj pravo Access-Control-Allow-Origin zaglavlje? Ako ne, preglednik će blokirati zahtjev i vidjet ćete CORS pogrešku u konzoli. Zaglavlja odgovora poslužitelja jedino su mjesto gdje se to može popraviti — ne možete to zaobići u pregledniku.
  1. Vremenski podaci: Koliko je zahtjev trajao? Ako je spor, je li riječ o mrežnoj latenciji ili obradi na poslužitelju? Browser DevTools i WebPageTest prikazuju raščlambe vremena koje vam govore kamo je vrijeme otišlo.

Za dublji uvid u to kako se ponašanje preglednika promijenilo oko privatnosti i zaglavlja, pogledajte što se promijenilo za kolačiće u 2026. i što učiniti u vezi s tim, gdje su objašnjene implikacije nedavnih ažuriranja preglednika na zaglavlja i privolu.

Ključni zaključci

  • curl -L -v pokazuje cijeli lanac preusmjeravanja i sva zaglavlja, bez interpretacije preglednika
  • Kartica Network u pregledniku pokazuje što je preglednik učinio s odgovorom, uključujući odluke o predmemoriranju i CORS-u
  • mitmproxy pokazuje što je preglednik poslao, uključujući zaglavlja koja preglednik automatski dodaje
  • WebPageTest pokazuje što stvarni korisnici doživljavaju, uključujući ponašanje CDN-a i regionalne razlike
  • Petlje preusmjeravanja i proturječna zaglavlja najčešći su produkcijski problemi, a nevidljivi su bez pregleda sirovog HTTP-a

FAQ

Q: Zašto curl prikazuje drugačija zaglavlja od preglednika?

A: Zato što preglednik automatski dodaje zaglavlja (User-Agent, Accept, Cookie) i slijedi vlastita pravila za predmemoriranje i CORS. curl šalje samo ono što mu kažete da pošalje. Da biste vidjeli što preglednik stvarno šalje, upotrijebite mitmproxy ili Browser DevTools.

Q: Kako otkloniti pogreške u preusmjeravanju koje se događa samo nekim korisnicima?

A: Provjerite ovisi li preusmjeravanje o zaglavljima koja korisnik šalje: User-Agent, Accept-Language, Cookie ili IP adresi (putem X-Forwarded-For). Upotrijebite curl za slanje istih zaglavlja koja je poslao korisnik ili upotrijebite WebPageTest za učitavanje stranice s korisnikove lokacije.

Q: Koja je razlika između 301 i 302 preusmjeravanja?

A: 301 je trajno i govori pregledniku da predmemorira preusmjeravanje (ponekad zauvijek). 302 je privremeno i govori pregledniku da ga ne predmemorira. Ako niste sigurni koje upotrijebiti, upotrijebite 302 — uvijek ga kasnije možete promijeniti u 301.

Q: Zašto moje preusmjeravanje radi u curlu, ali ne u pregledniku?

A: Vjerojatno zato što preglednik predmemorira staro preusmjeravanje ili zato što preglednik blokira preusmjeravanje zbog CORS-a ili pravila miješanog sadržaja. Provjerite konzolu u Browser DevTools za pogreške i provjerite Cache-Control zaglavlja da vidite koristi li preglednik predmemorirani odgovor.

Q: Kako mogu vidjeti zaglavlja koja dodaje CDN?

A: Upotrijebite curl za pogađanje CDN URL-a, zatim ponovno upotrijebite curl za izravno pogađanje origin poslužitelja (zaobilazeći CDN). Usporedite zaglavlja. Ona koja se pojavljuju samo u prvom odgovoru došla su iz CDN-a.

<!-- tool-cta:start -->

💡 Isprobajte ovo: Kada istražujete probleme s preusmjeravanjima, Redirect Checker prati cijeli lanac i prikazuje statusne kodove i zaglavlja na svakom koraku.

<!-- tool-cta:end -->

Izvori

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

Često postavljana pitanja

Zašto curl prikazuje drugačija zaglavlja od preglednika?
Zato što preglednik automatski dodaje zaglavlja (`User-Agent`, `Accept`, `Cookie`) i slijedi vlastita pravila za predmemoriranje i CORS. `curl` šalje samo ono što mu kažete da pošalje. Da biste vidjeli što preglednik stvarno šalje, upotrijebite `mitmproxy` ili Browser DevTools.
Kako otkloniti pogreške u preusmjeravanju koje se događa samo nekim korisnicima?
Provjerite ovisi li preusmjeravanje o zaglavljima koja korisnik šalje: `User-Agent`, `Accept-Language`, `Cookie` ili IP adresi (putem `X-Forwarded-For`). Upotrijebite `curl` za slanje istih zaglavlja koja je poslao korisnik ili upotrijebite WebPageTest za učitavanje stranice s korisnikove lokacije.
Koja je razlika između 301 i 302 preusmjeravanja?
301 je trajno i govori pregledniku da predmemorira preusmjeravanje (ponekad zauvijek). 302 je privremeno i govori pregledniku da ga ne predmemorira. Ako niste sigurni koje upotrijebiti, upotrijebite 302 — uvijek ga kasnije možete promijeniti u 301.
Zašto moje preusmjeravanje radi u curlu, ali ne u pregledniku?
Vjerojatno zato što preglednik predmemorira staro preusmjeravanje ili zato što preglednik blokira preusmjeravanje zbog CORS-a ili pravila miješanog sadržaja. Provjerite konzolu u Browser DevTools za pogreške i provjerite `Cache-Control` zaglavlja da vidite koristi li preglednik predmemorirani odgovor.
Kako mogu vidjeti zaglavlja koja dodaje CDN?
Upotrijebite `curl` za pogađanje CDN URL-a, zatim ponovno upotrijebite `curl` za izravno pogađanje origin poslužitelja (zaobilazeći CDN). Usporedite zaglavlja. Ona koja se pojavljuju samo u prvom odgovoru došla su iz CDN-a.

Izvori i daljnje čitanje

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

Zadnje ažurirano:

Nastavite čitati