Nedidelis įrankių rinkinys peradresavimams ir HTTP antraštėms derinti produkcinėje aplinkoje
Penki komandinės eilutės įrankiai ir naršyklės metodai, parodantys, kas iš tikrųjų vyksta tarp kliento ir serverio
Turinys
- HTTP derinimo produkcinėje aplinkoje problema
- curl: pagrindas
- httpie: curl su geresnėmis numatytosiomis nuostatomis
- Browser DevTools: Network skirtukas
- mitmproxy: perimantis tarpinis serveris
- webpagetest: produkcinės aplinkos perspektyva
- Kai antraštės meluoja
- Peradresavimo ciklo problema
- Ką tikrinti pirmiausia
- Pagrindinės išvados
- FAQ
- Sources
HTTP derinimo produkcinėje aplinkoje problema
Dauguma HTTP problemų naršyklėje yra nematomos. Peradresavimo grandinė nepastebimai nutrūksta, talpyklos antraštėje suklystama vienu simboliu, CORS politika užblokuoja užklausą be paaiškinimo. Naršyklės kūrėjo įrankiai parodo pokalbio rezultatą, bet dažnai paslepia neapdorotą mainų eigą, kuri sukėlė problemą.
Tai ypač svarbu produkcinėje aplinkoje, kur negalite pridėti žurnalizavimo ar iš naujo paleisti paslaugų, kad pamatytumėte, kas pasikeitė. Reikia įrankių, kurie parodytų tikrąjį HTTP pokalbį: užklausų antraštes, atsakymų antraštes, būsenos kodus, peradresavimo tikslus, laikus. Štai penki įrankiai, kurie patikimai atlieka šį darbą, ir naršyklės metodai, kurie juos papildo.
curl: pagrindas
curl yra pirmasis įrankis, kurio verta imtis, nes jis parodo tiksliai tai, ką atsiuntė serveris, be tarpinės naršyklės interpretacijos.
Norėdami matyti atsakymo antraštes be turinio:
curl -I https://example.com
Norėdami sekti peradresavimus ir matyti kiekvieną žingsnį:
curl -L -v https://example.com
-v vėliavėlė (verbose) parodo visą užklausą ir atsakymą, įskaitant visas antraštes. -L vėliavėlė automatiškai seka peradresavimus. Kartu jos parodo visą peradresavimo grandinę, kurioje ir slypi dauguma produkcinių problemų.
Norėdami matyti tik peradresavimo vietas:
curl -s -o /dev/null -w "%{http_code} %{redirect_url}\n" -L https://example.com
Tai naudinga, kai reikia patikrinti peradresavimo grandinę be visų antraščių triukšmo. -w vėliavėlė suformatuoja išvestį taip, kad būtų rodomas tik būsenos kodas ir kitas grandinės URL.
curl taip pat leidžia siųsti pasirinktines antraštes, o tai būtina testuojant CDN elgseną, autentifikavimą ar API galinius taškus:
curl -H "Authorization: Bearer token" -H "Accept: application/json" https://api.example.com
httpie: curl su geresnėmis numatytosiomis nuostatomis
httpie yra Python įrankis, darantis tai, ką daro curl, bet turintis lengviau įsimenamą sintaksę ir lengviau skaitomą išvestį. Tai nėra pakaitalas — curl yra galingesnis ir plačiau įdiegtas — tačiau greitiems patikrinimams httpie yra spartesnis.
Norėdami matyti antraštes:
http HEAD https://example.com
Norėdami sekti peradresavimus:
http --follow --all https://example.com
--all vėliavėlė parodo kiekvieną peradresavimo grandinės atsakymą, o ne tik galutinį. Tai atitinka curl -L -v, tačiau išvestis yra pažymėta spalvomis ir lengviau peržvelgiama.
Norėdami siųsti JSON:
http POST https://api.example.com name=value
httpie pagal numatymą daro prielaidą, kad naudojamas JSON, todėl testuojant API reikia mažiau rašyti. Jis taip pat gražiai suformatuoja atsakymą, todėl lengviau pastebėti netaisyklingas antraštes ar netikėtas reikšmes.
Browser DevTools: Network skirtukas
Naršyklės Network skirtukas yra vieta, nuo kurios reikėtų pradėti, jei problema pasireiškia tik naršyklėje. Jis rodo tą pačią informaciją kaip curl, bet taip pat parodo naršyklės interpretaciją: ar ji užblokavo užklausą, kaip tvarkė talpinimą, ar siuntė slapukus.
Norėdami matyti visas užklausos ir atsakymo antraštes, Network skirtuke spustelėkite bet kurią užklausą, tada peržiūrėkite Headers skiltį. „Raw“ rodinys parodo antraštes tiksliai taip, kaip jos buvo išsiųstos, be formatavimo.
Norėdami matyti peradresavimo grandines, ieškokite užklausų su 3xx būsenos kodais. Naršyklė jas sugrupuoja po galutine užklausa, bet galite jas išskleisti ir pamatyti kiekvieną žingsnį. Čia rasite peradresavimo ciklus, trūkstamas Location antraštes arba peradresavimus, nukreipiančius į netinkamą domeną.
Norėdami matyti laikus, bet kuriai užklausai peržiūrėkite Timing skirtuką. Jis parodo, kiek laiko naršyklė praleido DNS paieškai, TCP ryšiui, TLS rankos paspaudimui ir laukdama serverio. Jei peradresavimas lėtas, Timing skirtukas parodo, ar problema yra tinklo delsa, ar serverio apdorojimas.
Vienas apribojimas: naršyklė saugumo sumetimais paslepia kai kurias antraštes. Set-Cookie antraštės matomos, bet tikrosios slapukų reikšmės yra užmaskuotos. Authorization antraštės kartais visiškai paslepiamos. Jei reikia jas matyti, naudokite curl.
mitmproxy: perimantis tarpinis serveris
mitmproxy yra Python įrankis, įsiterpiantis tarp naršyklės ir serverio bei realiuoju laiku rodantis kiekvieną užklausą ir atsakymą. Jis sudėtingesnis nei curl, bet tai vienintelis įrankis, parodantis, ką naršyklė iš tikrųjų siunčia, įskaitant antraštes, kurias naršyklė prideda automatiškai.
Norėdami jį paleisti:
mitmproxy
Tada sukonfigūruokite naršyklę naudoti localhost:8080 kaip HTTP tarpinį serverį. mitmproxy terminalo sąsajoje parodys kiekvieną užklausą. Galite tikrinti antraštes, redaguoti užklausas prieš jas išsiunčiant arba pakartoti užklausas su kitais parametrais.
Tai naudinga derinant problemas, kurios pasireiškia tik naršyklėje: CORS preflight užklausas, slapukų tvarkymą arba užklausas, kurios nepavyksta, kai yra tam tikros antraštės. Tai taip pat naudinga testuojant, kaip jūsų svetainė elgiasi už įmonės tarpinio serverio ar VPN, nes mitmproxy gali imituoti tokias aplinkas.
Trūkumas — sudėtingesnis paruošimas. Reikia įdiegti šakninį sertifikatą, kad mitmproxy galėtų perimti HTTPS srautą, ir sukonfigūruoti naršyklę naudoti tarpinį serverį. Greitiems patikrinimams curl yra spartesnis. Giliam derinimui mitmproxy vertas paruošimui skirto laiko.
webpagetest: produkcinės aplinkos perspektyva
WebPageTest yra nemokama paslauga, kuri įkelia jūsų puslapį realiose naršyklėse iš skirtingų vietovių ir parodo visą HTTP pokalbį. Ji lėtesnė nei curl, bet parodo, ką patiria tikri naudotojai, įskaitant CDN elgseną, DNS sprendimą ir TLS derybas.
„Request Headers“ ir „Response Headers“ rodiniai parodo tiksliai tai, ką naršyklė išsiuntė ir gavo. „Waterfall“ rodinys parodo kiekvienos užklausos laikus, įskaitant peradresavimus. Čia rasite problemas, kurios pasireiškia tik tam tikruose regionuose ar tam tikruose tinkluose.
WebPageTest taip pat parodo pagrindinio dokumento peradresavimo grandinę, kurioje yra dauguma peradresavimo problemų. Jei jūsų svetainė peradresuoja iš http:// į https://, tada iš www. į ne www., o tada iš / į /en/, WebPageTest parodo visus tris žingsnius ir kiek laiko kiekvienas užtruko.
Įrankiams, padedantiems patikrinti ir optimizuoti šiuos HTTP pagrindus, Wux Webtools siūlo kelias priemones, kurios veikia visiškai jūsų naršyklėje, įskaitant antraščių analizatorius ir peradresavimų tikrintuvus, saugančius jūsų privatumą apdorojant viską kliento pusėje.
Kai antraštės meluoja
Sunkiausios HTTP problemos yra tos, kai serveris siunčia prieštaringas antraštes. Cache-Control antraštė sako no-cache, bet Expires antraštė sako, kad išteklius galioja metus. Location antraštė nurodo santykinį URL, bet Content-Location antraštė nurodo kitur. Naršyklė turi spėti, kuria pasitikėti, o skirtingos naršyklės spėja skirtingai.
Kai taip nutinka, reikia matyti neapdorotas antraštes tokia tvarka, kokia serveris jas atsiuntė. curl -v tai daro. Taip pat ir mitmproxy. Naršyklės DevTools kartais perrikiuoja antraštes dėl skaitomumo, o tai paslepia problemą.
Kita dažna problema: antraštės, kurias prideda CDN arba apkrovos balansavimo priemonė, o ne jūsų programa. Jei derinate talpinimo problemą, turite žinoti, ar Cache-Control antraštė atėjo iš jūsų programos, ar iš CDN. curl parodo galutinį rezultatą, bet nepasako, iš kur atsirado kiekviena antraštė. Tam reikia apeiti CDN (kreipiantis tiesiai į pradinį serverį) ir palyginti antraštes.
Peradresavimo ciklo problema
Peradresavimo ciklai yra dažniausia HTTP problema produkcinėje aplinkoje. Jie atsiranda, kai du serveriai nesutaria, kur turėtų vesti URL: CDN peradresuoja į pradinį serverį, o pradinis serveris peradresuoja atgal į CDN. Arba apkrovos balansavimo priemonė peradresuoja HTTP į HTTPS, bet programa peradresuoja HTTPS atgal į HTTP, nes nemato X-Forwarded-Proto antraštės.
Norint tai derinti, reikia matyti visą peradresavimo grandinę, įskaitant Location antraštę kiekviename žingsnyje. curl -L -v tai daro, bet sustoja po 50 peradresavimų, kad išvengtų begalinių ciklų. Jei pasiekiate šią ribą, turite peradresavimo ciklą.
Pataisa paprastai yra konfigūracijos pakeitimas: nurodyti programai pasitikėti X-Forwarded-Proto antrašte arba nurodyti CDN nebeperadresuoti užklausų, kurios jau yra HTTPS. Tačiau negalite to pataisyti, kol nepamatote ciklo, o naršyklė neparodys daugiau nei kelių peradresavimų prieš pasiduodama.
Ką tikrinti pirmiausia
Kai kas nors sugenda produkcinėje aplinkoje, tikrinkite šia tvarka:
- Būsenos kodas: Ar jis toks, kokio tikėjotės? 301 yra nuolatinis, 302 — laikinas, 307 išsaugo HTTP metodą. Jei matote netinkamą kodą, problema yra peradresavimo konfigūracijoje.
- Location antraštė: Ar ji nurodo tinkamą vietą? Ar tai absoliutus URL, ar santykinis? Santykiniai URL sprendžiami pagal dabartinį URL, todėl gali duoti netikėtų rezultatų, jei bazinis URL nėra toks, koks manote.
- Talpyklos antraštės: Ar naršyklė talpina peradresavimą? 301 peradresavimas pagal numatymą talpinamas, vadinasi, neteisingai sukonfigūruotas peradresavimas gali sugadinti jūsų svetainę valandoms net ir po pataisymo. Patikrinkite
Cache-ControlirExpiresantraštes, kad pamatytumėte, kiek ilgai naršyklė prisimins peradresavimą.
- CORS antraštės: Jei užklausa yra tarp skirtingų kilmių, ar serveris siunčia tinkamą
Access-Control-Allow-Originantraštę? Jei ne, naršyklė užblokuos užklausą, o konsolėje matysite CORS klaidą. Serverio atsakymo antraštės yra vienintelė vieta tai taisyti — naršyklėje to apeiti negalite.
- Laikai: Kiek laiko užtruko užklausa? Jei ji lėta, ar tai tinklo delsa, ar serverio apdorojimas? Naršyklės DevTools ir WebPageTest abu rodo laikų išskaidymą, kuris parodo, kur dingo laikas.
Norėdami giliau suprasti, kaip naršyklės elgsena keitėsi privatumo ir antraščių srityse, skaitykite kas pasikeitė slapukams 2026 m. ir ką dėl to daryti, kur aptariamos naujausių naršyklių atnaujinimų antraščių ir sutikimo pasekmės.
Pagrindinės išvados
curl -L -vparodo visą peradresavimo grandinę ir visas antraštes be naršyklės interpretacijos- Naršyklės Network skirtukas parodo, ką naršyklė padarė su atsakymu, įskaitant talpinimą ir CORS sprendimus
mitmproxyparodo, ką naršyklė išsiuntė, įskaitant antraštes, kurias naršyklė prideda automatiškai- WebPageTest parodo, ką patiria tikri naudotojai, įskaitant CDN elgseną ir regioninius skirtumus
- Peradresavimo ciklai ir prieštaringos antraštės yra dažniausios produkcinės problemos, o be neapdoroto HTTP tikrinimo jos nematomos
FAQ
Q: Kodėl curl rodo kitokias antraštes nei naršyklė?
A: Nes naršyklė automatiškai prideda antraštes (User-Agent, Accept, Cookie) ir laikosi savo talpinimo bei CORS taisyklių. curl siunčia tik tai, ką jam nurodote siųsti. Norėdami matyti, ką naršyklė iš tikrųjų siunčia, naudokite mitmproxy arba naršyklės DevTools.
Q: Kaip derinti peradresavimą, kuris pasireiškia tik kai kuriems naudotojams?
A: Patikrinkite, ar peradresavimas priklauso nuo naudotojo siunčiamų antraščių: User-Agent, Accept-Language, Cookie arba IP adreso (per X-Forwarded-For). Naudokite curl, kad išsiųstumėte tas pačias antraštes, kurias siuntė naudotojas, arba naudokite WebPageTest, kad įkeltumėte puslapį iš naudotojo vietovės.
Q: Kuo skiriasi 301 ir 302 peradresavimai?
A: 301 yra nuolatinis ir nurodo naršyklei talpinti peradresavimą (kartais visam laikui). 302 yra laikinas ir nurodo naršyklei jo netalpinti. Jei nesate tikri, kurį naudoti, naudokite 302 — vėliau visada galėsite pakeisti į 301.
Q: Kodėl mano peradresavimas veikia su curl, bet neveikia naršyklėje?
A: Tikriausiai todėl, kad naršyklė talpina seną peradresavimą arba blokuoja peradresavimą dėl CORS ar mišraus turinio taisyklių. Patikrinkite naršyklės DevTools konsolę dėl klaidų ir Cache-Control antraštes, kad sužinotumėte, ar naršyklė naudoja talpintą atsakymą.
Q: Kaip pamatyti antraštes, kurias prideda CDN?
A: Naudokite curl, kad kreiptumėtės į CDN URL, tada dar kartą naudokite curl, kad kreiptumėtės tiesiai į pradinį serverį (apeidami CDN). Palyginkite antraštes. Tos, kurios pasirodo tik pirmajame atsakyme, atėjo iš CDN.
<!-- tool-cta:start -->
💡 Išbandykite tai: Ieškant peradresavimo problemų, Redirect Checker atseka visą grandinę ir parodo būsenos kodus bei antraštes kiekviename žingsnyje.
<!-- tool-cta:end -->
Sources
- curl documentation — Oficiali curl komandinės eilutės parinkčių ir elgsenos nuoroda
- HTTPie documentation — httpie sintaksės ir funkcijų vadovas
- MDN Web Docs: HTTP redirections — Išsamus HTTP peradresavimo būsenos kodų ir elgsenos paaiškinimas
- WebPageTest documentation — Kaip interpretuoti WebPageTest rezultatus ir antraštes


