Kvifor ein VPN-utgang og språket i nettlesaren din ikkje stemmer overeins
Accept-Language ber om eit svarspråk; VPN-en endrar kjeldeadressa. Når eit nettstad ser lokalisert ut, avgjer tre inngangar kven som vann.
Opne utviklarverktøya, last sida og les førespurnadshovuda før du konkluderer noko om VPN-en. Du finn vanlegvis ei Accept-Language-linje som ber om eit bestemt sett språk, og den linja kjem frå nettlesarinnstillingane, ikkje frå utgangsadressa di. Ein fransktalande på ein utgang i Tokyo sender framleis fransk, og eit nettstad som svarar på fransk, svarar hovudet. Tunnelen lekk ikkje berre fordi sida kom på eit kjent språk.
Les hovudet først
I ein stasjonær nettlesar opnar du Nettverk-panelet, lastar på nytt, klikkar på dokumentførespurnaden og ser under førespurnadshovuda. Frå ein terminal kan du sjå det same utan nettlesar, og du kan overstyre verdien for å teste åtferda til nettstaden:
curl -sS -D /tmp/h1 -o /tmp/b1 https://example.com
curl -sS -D /tmp/h2 -o /tmp/b2 -H 'Accept-Language: fr,en;q=0.6' https://example.com
grep -o 'lang="[^"]*"' /tmp/b1 /tmp/b2
diff /tmp/b1 /tmp/b2 | head -40
No ligg brødteksten på disken, så samanlikninga handlar om sida og ikkje om eit hovud som kanskje aldri vert sendt. Sjå på lang-attributtet til html-taggen og på den synlege teksten, fordi Content-Language er valfritt og mange servarar utelèt det. Eit nettstad som byter heile sida frå engelsk til fransk på same URL, kan difor sjå uendra ut i ei samanlikning av berre hovud. Viss språket i dokumentet følgjer hovudet medan utgangen står fast, var hovudet den avgjerande inngangen, og VPN-en er irrelevant for den observasjonen.
Bruk ein annan nettlesarprofil i staden for språkveljaren til nettstaden sjølv for denne testen. Ein veljar skriv vanlegvis ein cookie, som er ein annan inngang, og du endar med å måle cookien i staden for hovudet.
Kva q-verdiane tyder, og kva dei ikkje tyder
RFC 9110 avsnitt 12.5.4 definerer Accept-Language som ei liste over føretrekte naturlege språk for svaret. Kvar oppføring kan bera ei vekt frå 0 til 1, eit område utan vekt har vekt 1, og ei vekt på 0 merkjer eit språk som ikkje akseptabelt. Det er ein preferanserekkjefølgje og ikkje noko meir.
Verdien er ikkje ein posisjonsrapport, ikkje ein tillitsscore og ikkje ein identitet. Ein servar står fritt til å ignorere han, til å levere den einaste omsetjinga han har, eller til å la ei landbasert omdirigering vinne. Innhaldsforhandling er valet til servaren, og hovudet er ein inngang til det valet, ikkje ein kommando.
Det er dette folk går glipp av når dei handsamar ei lokalisert side som ein posisjonstest. Hovudet seier kva språk personen føretrekker å lese, og ein preferanse kan reise kvar som helst.
Tre inngangar avgjer kva språk du faktisk får
Isoler dei éin om gongen, for utanfrå ser du ikkje kven som vann:
- Hovudet. Test med ein annan profil som er sett opp for ei anna språkliste, og sjå om sida endrar seg medan alt anna held seg konstant.
- Eit lagra val. Test i eit privat vindauge utan cookies, eller tøm lagringa til nettstaden. Kontoinnstillingar og oppføringar i localStorage kan låse eit språk i månadsvis.
- Ein URL eller omdirigering. Test ved å be om den eksplisitte språkstien, til dømes
/fr/, og ved å følgje statuskodane for ei omdirigering basert på kjeldeadressa.
Køyr dei tre testane i den rekkjefølgja og skriv ned kven som flytta resultatet. Éin enkel sideinnlasting som byter språk etter at du slår på VPN-en, er svak evidens, fordi både ei omdirigering og ein bufra cookie kan skape det inntrykket.
Kva VPN-en endrar, og kva han ikkje endrar
Tunnelen endrar kjeldeadressa ein servar ser, og med henne alt servaren utleier frå IP-geolokasjon. Han skriv ikkje om språkpreferansane til nettlesaren, slettar ikkje ei lagra innstilling og endrar ikkje URL-en du skreiv inn. Desse inngangane blir nøyaktig der dei var, så ei side kan halde på det gamle språket sitt etter at utgangen flyttar seg.
Geolokasjon tilfører sin eigen støy. Adressedatabasar er usamde med kvarandre, og ein utgang registrert i eitt land kan bli tilordna eit anna, noko som gjer ei landbasert omdirigering feil ut av grunnar som ikkje har noko med nettlesaren din å gjere.
Ein rask kontroll skil dei: be om sida på nytt, noter adressa du presenterer, og samanlikn deretter svarspråket med hovudlista di. Viss språket samsvarar med lista di og ikkje med utgangslandet, var hovudet den avgjerande inngangen, og det er ingenting å rette i tunnelen.
Kva ei lokalisert side beviser, og kva ho ikkje beviser
Her er det eit reelt personvernpoeng, og det er mindre enn det folk vanlegvis tek opp. Ei fullstendig liste over språkpreferansar er ein inngang for fingeravtrykk og kan avsløre noko om kven du er eller kva du les. Det er ei ekte avsløring av preferanse, og det er ikkje det same som å bevise at trafikk slapp ut av tunnelen.
Ei lokalisert side er ikkje ein lekkasjeindikator. Viss du verkeleg vil teste for lekkasje, sjekk utgangsadressa nettstaden ser, resolverstien som vert brukt til namneoppslag, og kandidatane ein WebRTC-stack avslører. Desse testane svarar på spørsmålet språket på sida ikkje kan svare på.
Neste gong eit nettstad ser ut til å kjenne landet ditt, opne førespurnadshovuda først. Viss svarspråket samsvarar med lista til nettlesaren din, lakk ingenting, og laget du bør sjå på, er det som er framfor deg.