Dev Tools & Workflow

Мали скуп алата за отклањање грешака у преусмеравањима и HTTP заглављима у продукцији

Пет алата из командне линије и техника у прегледачу које показују шта се заправо дешава између клијента и сервера

The Wux Webtools Team The Wux Webtools Team 2 min čitanja Pomoć veštačke inteligencije, pregledano od strane ljudi
Split-screen illustration showing terminal with HTTP headers on left and browser network panel on right
Sadržaj
  1. Проблем са отклањањем HTTP грешака у продукцији
  2. curl: основа
  3. httpie: curl са бољим подразумеваним вредностима
  4. Browser DevTools: картица Network
  5. mitmproxy: пресретачки proxy
  6. webpagetest: перспектива продукције
  7. Када заглавља лажу
  8. Проблем петље преусмеравања
  9. Шта прво проверити
  10. Кључне поруке
  11. FAQ
  12. Sources

Проблем са отклањањем HTTP грешака у продукцији

Већина HTTP проблема је невидљива у прегледачу. Ланац преусмеравања неуспешно се заврши без јасне поруке, cache заглавље је погрешно за један знак, CORS политика блокира захтев без објашњења. Алатке за програмере у прегледачу показују резултат размене, али често сакривају сирову размену која је изазвала проблем.

Ово је најважније у продукцији, где не можете да додате логовање или поново покренете сервисе да бисте видели шта се променило. Потребни су вам алати који показују стварну HTTP размену: заглавља захтева, заглавља одговора, статусне кодове, циљеве преусмеравања, време извршавања. Ево пет алата који тај посао раде поуздано, уз технике у прегледачу које их допуњују.

curl: основа

curl је први алат за којим треба посегнути, јер показује тачно шта је сервер послао, без тумачења прегледача између.

Да видите заглавља одговора без тела:

curl -I https://example.com

Да пратите преусмеравања и видите сваки корак:

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

Опција -v (verbose) приказује цео захтев и одговор, укључујући сва заглавља. Опција -L аутоматски прати преусмеравања. Заједно приказују цео ланац преусмеравања, где се налази већина продукционих проблема.

Да видите само локације преусмеравања:

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

Ово је корисно када треба да проверите ланац преусмеравања без шума комплетних заглавља. Опција -w форматира излаз тако да прикаже само статусни код и следећи URL у ланцу.

curl вам такође омогућава да шаљете прилагођена заглавља, што је неопходно за тестирање понашања CDN-а, аутентификације или API крајњих тачака:

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

httpie: curl са бољим подразумеваним вредностима

httpie је Python алат који ради оно што ради curl, али са синтаксом која се лакше памти и излазом који се лакше чита. Није замена — curl је моћнији и шире инсталиран — али за брзе провере httpie је бржи.

Да видите заглавља:

http HEAD https://example.com

Да пратите преусмеравања:

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

Опција --all приказује сваки одговор у ланцу преусмеравања, не само коначни. То је еквивалент команде curl -L -v, али је излаз обојен и лакши за преглед.

Да пошаљете JSON:

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

httpie подразумевано претпоставља JSON, што штеди куцање када тестирате API-је. Такође лепо форматира одговор, што олакшава уочавање неисправно форматираних заглавља или неочекиваних вредности.

Browser DevTools: картица Network

Картица Network у прегледачу је место одакле треба да почнете ако се проблем јавља само у прегледачу. Она приказује исте информације као curl, али вам показује и тумачење прегледача: да ли је блокирао захтев, како је обрадио кеширање, да ли је послао колачиће.

Да видите комплетна заглавља захтева и одговора, кликните на било који захтев у картици Network, а затим погледајте одељак Headers. Приказ „Raw“ показује заглавља тачно онако како су послата, без форматирања.

Да видите ланце преусмеравања, потражите захтеве са 3xx статусним кодовима. Прегледач их групише испод коначног захтева, али можете да их проширите и видите сваки корак. Ту ћете пронаћи петље преусмеравања, недостајућа Location заглавља или преусмеравања која воде на погрешан домен.

Да видите време извршавања, погледајте картицу Timing за било који захтев. Она показује колико је времена прегледач потрошио на DNS lookup, TCP connection, TLS handshake и чекање сервера. Ако је преусмеравање споро, картица Timing вам говори да ли је проблем у мрежној латенцији или у обради на серверу.

Једно ограничење: прегледач из безбедносних разлога сакрива нека заглавља. Set-Cookie заглавља су видљива, али су стварне вредности колачића редиговане. Authorization заглавља су понекад потпуно сакривена. Ако треба да их видите, користите curl.

mitmproxy: пресретачки proxy

mitmproxy је Python алат који стоји између прегледача и сервера, приказујући сваки захтев и одговор у реалном времену. Сложенији је од curl, али је једини алат који показује шта прегледач заиста шаље, укључујући заглавља која прегледач аутоматски додаје.

Да га покренете:

mitmproxy

Затим подесите прегледач да користи localhost:8080 као HTTP proxy. mitmproxy ће вам приказати сваки захтев у терминалском интерфејсу. Можете да прегледате заглавља, измените захтеве пре слања или поново пошаљете захтеве са другачијим параметрима.

Ово је корисно за отклањање проблема који се јављају само у прегледачу: CORS preflight захтеви, руковање колачићима или захтеви који не успевају када су присутна одређена заглавља. Корисно је и за тестирање како се ваш сајт понаша иза корпоративног proxy-ја или VPN-а, јер mitmproxy може да симулира та окружења.

Недостатак је сложеност подешавања. Морате да инсталирате root сертификат да би mitmproxy могао да пресреће HTTPS саобраћај, и морате да подесите прегледач да користи proxy. За брзе провере curl је бржи. За дубинско отклањање грешака mitmproxy вреди времена за подешавање.

webpagetest: перспектива продукције

WebPageTest је бесплатна услуга која учитава вашу страницу из стварних прегледача на различитим локацијама и приказује целу HTTP размену. Спорији је од curl, али показује шта стварни корисници доживљавају, укључујући понашање CDN-а, DNS резолуцију и TLS преговарање.

Прикази „Request Headers“ и „Response Headers“ показују тачно шта је прегледач послао и примио. Приказ „Waterfall“ показује време извршавања сваког захтева, укључујући преусмеравања. Ту ћете пронаћи проблеме који се јављају само у одређеним регионима или на одређеним мрежама.

WebPageTest такође приказује ланац преусмеравања за главни документ, где се налази већина проблема са преусмеравањем. Ако ваш сајт преусмерава са http:// на https://, затим са www. на non-www., па са / на /en/, WebPageTest ће приказати сва три корака и колико је сваки трајао.

За алате који вам помажу да проверите и оптимизујете ове HTTP основе, Wux Webtools нуди неколико услужних алата који раде у потпуности у вашем прегледачу, укључујући анализаторе заглавља и провере преусмеравања које поштују вашу приватност тако што све обрађују на страни клијента.

Када заглавља лажу

Најтежи HTTP проблеми су они у којима сервер шаље противречна заглавља. Cache-Control заглавље каже no-cache, али Expires заглавље каже да је ресурс важећи годину дана. Location заглавље упућује на релативни URL, али Content-Location заглавље упућује негде другде. Прегледач мора да процени коме да верује, а различити прегледачи процењују различито.

Када се то догоди, потребно је да видите сирова заглавља редоследом којим их је сервер послао. curl -v то ради. Исто важи и за mitmproxy. DevTools у прегледачу понекад преуређује заглавља ради читљивости, што сакрива проблем.

Још један чест проблем: заглавља која додаје CDN или балансер оптерећења, а не ваша апликација. Ако отклањате проблем са кеширањем, морате да знате да ли је Cache-Control заглавље дошло из ваше апликације или са CDN-а. curl показује коначан резултат, али не говори одакле је дошло свако заглавље. За то морате да заобиђете CDN (директним позивањем изворног сервера) и упоредите заглавља.

Проблем петље преусмеравања

Петље преусмеравања су најчешћи HTTP проблем у продукцији. Дешавају се када се два сервера не слажу око тога куда URL треба да води: CDN преусмерава на origin, origin преусмерава назад на CDN. Или балансер оптерећења преусмерава HTTP на HTTPS, али апликација преусмерава HTTPS назад на HTTP јер не види X-Forwarded-Proto заглавље.

Да бисте ово отклонили, морате да видите цео ланац преусмеравања, укључујући Location заглавље у сваком кораку. curl -L -v то ради, али се зауставља после 50 преусмеравања да би спречио бесконачне петље. Ако достижете то ограничење, имате петљу преусмеравања.

Исправка је обично промена конфигурације: реците апликацији да верује X-Forwarded-Proto заглављу или реците CDN-у да престане да преусмерава захтеве који су већ HTTPS. Али не можете да исправите проблем док не видите петљу, а прегледач вам неће приказати више од неколико преусмеравања пре него што одустане.

Шта прво проверити

Када се нешто поквари у продукцији, проверите ово редом:

  1. Статусни код: Да ли је онакав какав сте очекивали? 301 је трајан, 302 је привремен, 307 чува HTTP метод. Ако видите погрешан код, проблем је у конфигурацији преусмеравања.
  1. Location заглавље: Да ли води на право место? Да ли је апсолутни URL или релативни? Релативни URL-ови се разрешавају у односу на тренутни URL, што може да произведе неочекиване резултате ако основни URL није оно што мислите да јесте.
  1. Cache заглавља: Да ли прегледач кешира преусмеравање? 301 преусмеравање се подразумевано кешира, што значи да погрешно подешено преусмеравање може да поквари ваш сајт сатима чак и након што га исправите. Проверите Cache-Control и Expires заглавља да видите колико дуго ће прегледач памтити преусмеравање.
  1. CORS заглавља: Ако је захтев cross-origin, да ли сервер шаље исправно Access-Control-Allow-Origin заглавље? Ако не, прегледач ће блокирати захтев и видећете CORS грешку у конзоли. Заглавља одговора сервера су једино место где се ово исправља — не можете то заобићи у прегледачу.
  1. Време извршавања: Колико је захтев трајао? Ако је спор, да ли је узрок мрежна латенција или обрада на серверу? DevTools у прегледачу и WebPageTest приказују распад времена који вам говори где је време потрошено.

За дубљи поглед на то како се понашање прегледача променило око приватности и заглавља, погледајте шта се променило за колачиће у 2026. и шта да урадите поводом тога, где су обрађене последице недавних ажурирања прегледача по заглавља и пристанак.

Кључне поруке

  • curl -L -v приказује цео ланац преусмеравања и сва заглавља, без тумачења прегледача
  • Картица Network у прегледачу показује шта је прегледач урадио са одговором, укључујући одлуке о кеширању и CORS-у
  • mitmproxy показује шта је прегледач послао, укључујући заглавља која прегледач аутоматски додаје
  • WebPageTest показује шта стварни корисници доживљавају, укључујући понашање CDN-а и регионалне разлике
  • Петље преусмеравања и противречна заглавља најчешћи су продукциони проблеми, и невидљиви су без прегледа сировог HTTP-а

FAQ

Q: Зашто curl приказује другачија заглавља од прегледача?

A: Зато што прегледач аутоматски додаје заглавља (User-Agent, Accept, Cookie) и прати сопствена правила за кеширање и CORS. curl шаље само оно што му кажете да пошаље. Да видите шта прегледач заиста шаље, користите mitmproxy или DevTools у прегледачу.

Q: Како да отклоним грешку у преусмеравању које се дешава само неким корисницима?

A: Проверите да ли преусмеравање зависи од заглавља која корисник шаље: User-Agent, Accept-Language, Cookie или IP адресе (преко X-Forwarded-For). Користите curl да пошаљете иста заглавља која је корисник послао или користите WebPageTest да учитате страницу са локације корисника.

Q: Која је разлика између 301 и 302 преусмеравања?

A: 301 је трајан и говори прегледачу да кешира преусмеравање (понекад заувек). 302 је привремен и говори прегледачу да га не кешира. Ако нисте сигурни који да користите, користите 302 — увек га касније можете променити у 301.

Q: Зашто моје преусмеравање ради у curl-у, али не у прегледачу?

A: Вероватно зато што прегледач кешира старо преусмеравање или зато што прегледач блокира преусмеравање због CORS правила или правила за мешовити садржај. Проверите конзолу DevTools-а у прегледачу за грешке и проверите Cache-Control заглавља да видите да ли прегледач користи кеширани одговор.

Q: Како да видим заглавља која CDN додаје?

A: Користите curl да погодите CDN URL, затим поново користите curl да директно погодите изворни сервер (заобилазећи CDN). Упоредите заглавља. Она која се појављују само у првом одговору дошла су са CDN-а.

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

💡 Пробајте ово: Када истражујете проблеме са преусмеравањима, Redirect Checker прати цео ланац и приказује статусне кодове и заглавља на сваком кораку.

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

Sources

  • curl documentation — Званична референца за curl опције командне линије и понашање
  • HTTPie documentation — Водич за httpie синтаксу и функције
  • MDN Web Docs: HTTP redirections — Свеобухватно објашњење HTTP статусних кодова преусмеравања и понашања
  • WebPageTest documentation — Како тумачити WebPageTest резултате и заглавља
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

Зашто curl приказује другачија заглавља од прегледача?
Зато што прегледач аутоматски додаје заглавља (`User-Agent`, `Accept`, `Cookie`) и прати сопствена правила за кеширање и CORS. `curl` шаље само оно што му кажете да пошаље. Да видите шта прегледач заиста шаље, користите `mitmproxy` или DevTools у прегледачу.
Како да отклоним грешку у преусмеравању које се дешава само неким корисницима?
Проверите да ли преусмеравање зависи од заглавља која корисник шаље: `User-Agent`, `Accept-Language`, `Cookie` или IP адресе (преко `X-Forwarded-For`). Користите `curl` да пошаљете иста заглавља која је корисник послао или користите WebPageTest да учитате страницу са локације корисника.
Која је разлика између 301 и 302 преусмеравања?
301 је трајан и говори прегледачу да кешира преусмеравање (понекад заувек). 302 је привремен и говори прегледачу да га не кешира. Ако нисте сигурни који да користите, користите 302 — увек га касније можете променити у 301.
Зашто моје преусмеравање ради у curl-у, али не у прегледачу?
Вероватно зато што прегледач кешира старо преусмеравање или зато што прегледач блокира преусмеравање због CORS правила или правила за мешовити садржај. Проверите конзолу DevTools-а у прегледачу за грешке и проверите `Cache-Control` заглавља да видите да ли прегледач користи кеширани одговор.
Како да видим заглавља која CDN додаје?
Користите `curl` да погодите CDN URL, затим поново користите `curl` да директно погодите изворни сервер (заобилазећи CDN). Упоредите заглавља. Она која се појављују само у првом одговору дошла су са CDN-а.

Izvori i dalja literatura

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

Poslednje ažurirano:

Nastavite sa čitanjem