Ghid pentru Inspector de cereri
Cum citiți un șir User-Agent cu Inspector de cereri de la XGM, de ce arată atât de ciudat, ce schimbă client hints și de ce detecția după UA este fragilă.
Ce este un șir User-Agent
Fiecare cerere HTTP trimisă de un browser poartă un antet User-Agent (RFC 9110 §10.1.5) care descrie programul care a trimis-o. Serverele îl folosesc pentru statistici, pentru a oferi descărcări diferite în funcție de sistemul de operare și, uneori, mai puțin înțelept, pentru a decide ce funcționalități acceptă un browser. Roboții de indexare și scripturile își trimit propriile șiruri, precum curl/8.5.0 sau numele unui bot al unui motor de căutare. Conținutul antetului se află în întregime sub controlul clientului; standardul descrie doar formatul, fără să garanteze că este adevărat. De aceea merită privit nu ca un act de identitate, ci ca o declarație pe care clientul o face despre sine.
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36Șirul de mai sus aparține browserului Chrome, deși menționează Mozilla, AppleWebKit, KHTML, Gecko și Safari. Browserele au adăugat aceste simboluri de-a lungul deceniilor, pentru ca site-urile care căutau numele unui concurent să le servească și lor versiunea completă. Rezultatul este că informația utilă se ascunde printre simbolurile de compatibilitate, iar aici ajută un analizor. Din cauza aceleiași moșteniri, nici ordinea din șir nu este intuitivă: numele real al produsului apare de obicei spre final. Când încercați să citiți șirul cu ochiul liber, vă opriți ușor la simbolul greșit.
Cum folosiți Inspector de cereri
- Deschideți Inspector de cereri. Pornește cu șirul User-Agent al propriului dumneavoastră browser.
- Citiți browserul, sistemul de operare, motorul, tipul de dispozitiv și dacă șirul pare al unui bot sau al unui script.
- Lipiți alt șir, de exemplu dintr-un jurnal de server, pentru a-l analiza pe acela.
- Copiați sau exportați rezultatul pentru un raport de eroare.
Șirul dumneavoastră este citit direct din browser și este analizat în pagină; pentru acest instrument el nu este trimis către XGM. Când raportați o eroare de pe un site, versiunile identificate ale browserului și ale sistemului de operare sunt de obicei cele mai utile detalii pe care le puteți include. Dacă eroarea apare doar într-un singur browser, numele motorului contează la fel de mult ca numele produsului, fiindcă Blink, Gecko și WebKit se comportă diferit. Copiat ca atare în raport, rezultatul îi ajută pe ceilalți să reconstituie mediul.
Ce raportează analizorul
| Câmp | Exemple | Observații |
|---|---|---|
| Browser | Chrome 140, Firefox 143, Safari 18, Edge 140 | Identificat din simbolurile de produs; Edge și Opera se marchează peste cel al lui Chrome |
| Sistem de operare | Windows, macOS, Android, iOS, Linux | Versiunile pot fi înghețate sau aproximative |
| Motor | Blink, Gecko, WebKit | Determină randarea și comportamentul platformei web |
| Tip de dispozitiv | Desktop, mobil, tabletă | Pe baza simbolurilor de mobil și de tabletă |
| Bot sau script | Da pentru nume de roboți de indexare, curl, wget, biblioteci HTTP | Sunt detectați doar roboții care se declară ca atare |
Șiruri înghețate și simplificate
User-Agent Client Hints
Fiindcă șirul clasic dezvăluie multe și este greu de analizat, browserele Chromium au introdus User-Agent Client Hints. Implicit trimit antete scurte, precum Sec-CH-UA cu marca și versiunea majoră, Sec-CH-UA-Mobile și Sec-CH-UA-Platform. Serverele care au nevoie de mai multe detalii, precum versiunea completă sau modelul dispozitivului, trebuie să le ceară printr-un antet de răspuns Accept-CH. Astfel, informația detaliată nu se atașează automat fiecărei cereri, ci ajunge doar la site-urile care o cer cu adevărat. Asta reduce implicit cantitatea de date care pot fi adunate pentru amprentarea browserului.
Sec-CH-UA: "Chromium";v="140", "Google Chrome";v="140", "Not.A/Brand";v="99"
Sec-CH-UA-Mobile: ?0
Sec-CH-UA-Platform: "Windows"Firefox și Safari nu trimit aceste antete, așa că serverele au în continuare nevoie de șirul clasic pentru ele. În JavaScript, navigator.userAgentData expune aceleași informații în browserele care îl acceptă. În practică, cele două mecanisme se folosesc împreună: verificați întâi client hints și reveniți la șir atunci când lipsesc. Nici indiciile nu sunt mai de încredere decât șirul, pentru că tot clientul le produce; sunt doar mai bine structurate.
Roboți și user agenți falși
Roboții de indexare care se comportă corect se identifică singuri, de exemplu prin nume care conțin "bot" și printr-un URL care explică robotul. Scripturile și bibliotecile trimit valori implicite precum curl/8.5.0 sau python-requests/2.32.3, dacă nu sunt configurate altfel. Analizorul marchează astfel de șiruri drept roboți sau scripturi. Aceeași politețe ajută și când vă scrieți propria automatizare: un șir cu nume, versiune și o adresă de contact îi face pe proprietarii site-urilor să vă scrie în loc să vă blocheze. Șirurile implicite și anonime sunt, dimpotrivă, primele care se lovesc de limitele de rată.
Oricine poate trimite orice șir User-Agent, așa că un șir care pretinde că este robotul unui motor de căutare nu dovedește nimic. Motoarele de căutare mari documentează cum se verifică roboții lor, de obicei printr-o căutare DNS inversă a adresei IP, urmată de o căutare directă a numelui returnat. Instrumentul DNS invers execută primul pas. Un singur pas nu este suficient, fiindcă înregistrarea inversă poate fi controlată chiar de cel care trimite cererea. Dacă verificarea eșuează, cererea nu vine de la robotul pe care îl invocă.
dig +short -x 192.0.2.66
crawl-192-0-2-66.bot.example.com.
dig +short crawl-192-0-2-66.bot.example.com A
192.0.2.66 # must match the original IPUser agenți în jurnale și în analytics
Jurnalele serverului înregistrează User-Agent-ul fiecărei cereri, ceea ce le face utile pentru a observa trafic neobișnuit. Un val brusc de cereri cu o valoare implicită de bibliotecă, precum python-requests, ori cu o versiune de browser veche pe care aproape nimeni nu o mai folosește, indică adesea extragere automată de conținut sau atacuri automate. Browserele reale se actualizează des, așa că versiunile foarte vechi apărute în număr mare sunt suspecte. Merită privit și cazul în care un singur șir acoperă o parte mare din trafic. Un rezumat periodic al jurnalelor vă ajută să vedeți aceste tipare înainte ca problema să crească.
awk -F'"' '{print $6}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20În analytics, datele din User-Agent sunt tot mai puțin exacte, din cauza simplificărilor descrise mai sus. Folosiți-le pentru întrebări generale, precum ponderea vizitatorilor de pe mobil sau familiile de browsere care trebuie testate, nu pentru versiuni exacte de sistem de operare ori de dispozitiv. Urmărirea tendințelor dă rezultate mai sănătoase decât alergarea după diferențe mici. Când chiar aveți nevoie de detalii precise, cererea explicită de client hints este o cale mai corectă decât forțarea șirului.
De ce este fragilă decizia după user agent
Stabilirea comportamentului după numele browserului se strică atunci când browserele se schimbă, când apare unul nou sau când utilizatorul modifică șirul. MDN și producătorii de browsere recomandă în schimb detecția de funcționalități: verificați dacă un API există înainte să îl folosiți și folosiți CSS @supports pentru stiluri. Păstrați analiza User-Agent pentru statistici, jurnale și diagnostic în asistență. Detecția de funcționalități se comportă corect și în browserele despre care nu ați auzit încă, în timp ce o listă de nume se învechește la fiecare versiune nouă. Se și întreține mai ușor, fiindcă acel cod urmărește capabilități, nu nume.
| În loc de | Folosiți |
|---|---|
| Căutarea cuvântului "Safari" pentru a dezactiva o funcție | if ('share' in navigator) sau verificări similare de funcționalitate |
| Servirea unui site mobil după user agent | Design responsiv cu interogări media CSS |
| Blocarea „roboților” după șir | Limitarea ratei și detecția bazată pe comportament |
| Detectarea sistemului de operare pentru o descărcare | Oferiți toate descărcările și preselectați una după client hints sau după șir |
Întrebări frecvente
Care este user agentul meu?
Analizorul îl arată când deschideți pagina, citit direct din browserul dumneavoastră.
De ce șirul lui Chrome menționează Safari și Mozilla?
Din compatibilitate. Browserele au copiat simboluri de la browsere mai vechi, ca site-urile care căutau acele nume să nu le blocheze.
Poate un site să aibă încredere în user agent?
Nu. Orice client poate trimite orice șir. Folosiți-l ca indiciu pentru statistici și diagnostic, nu pentru decizii de securitate.
De ce versiunea mea de macOS sau de Android este greșită?
Browserele simplifică și îngheață părți din șir, din motive de confidențialitate. Versiunile detaliate sunt disponibile prin client hints doar când un site le cere.
Cum sunt detectați roboții?
După nume cunoscute de roboți de indexare și după simboluri obișnuite de scripturi și biblioteci. Roboții care se dau drept browsere nu pot fi detectați doar după șir.
Ce sunt client hints?
Antete precum Sec-CH-UA și Sec-CH-UA-Platform, pe care browserele Chromium le trimit cu informații structurate despre browser, înlocuind părți din șirul User-Agent.
Este încărcat undeva user agentul meu?
Nu de acest instrument; el este analizat în pagină. Ca pe orice site, serverul XGM primește antetul ca parte a cererilor obișnuite.
Ar trebui să îmi schimb user agentul pentru confidențialitate?
Schimbarea lui vă poate face mai ușor de identificat, nu mai greu, și poate strica site-uri. Funcțiile de confidențialitate ale browserului și blocarea urmăritorilor ajută de obicei mai mult.
De ce un iPad se prezintă ca un Mac?
Safari pe iPad cere implicit versiunile de desktop ale site-urilor și trimite un șir User-Agent în stil macOS. Verificarea suportului pentru atingere în JavaScript le deosebește mai bine decât șirul.
Trimit aplicațiile mobile user agenți?
Da. Aplicațiile trimit de obicei valoarea implicită a bibliotecii lor HTTP sau un șir propriu cu numele și versiunea aplicației, util pentru a recunoaște traficul lor în jurnale.
Cum setez un user agent în curl?
Folosiți -A, de exemplu curl -A "my-monitor/1.0 (+https://example.com/bot)" https://example.com. Identificați-vă scripturile onest, ca proprietarii site-urilor să vă poată contacta.