Откройте инструменты разработчика, загрузите страницу и прочитайте заголовки запроса, прежде чем делать какие-либо выводы о VPN. Обычно вы найдёте строку Accept-Language с запросом определённого набора языков, и эта строка берётся из настроек браузера, а не из вашего адреса выхода. Франкоязычный пользователь на выходе в Токио всё равно отправляет французский, и сайт, отвечающий на французском, отвечает заголовку. Туннель не утекает только потому, что страница пришла на знакомом языке.

Сначала прочитайте заголовок

В настольном браузере откройте панель «Сеть», перезагрузите страницу, щёлкните запрос документа и посмотрите раздел заголовков запроса. Из терминала то же самое видно без браузера, а значение можно переопределить, чтобы проверить поведение сайта:

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

Теперь тело лежит на диске, поэтому сравнение касается страницы, а не заголовка, который может вообще не отправляться. Посмотрите на атрибут lang тега html и на видимый текст, потому что Content-Language необязателен и многие серверы его опускают. Поэтому сайт, который на том же URL переключает всю страницу с английского на французский, может выглядеть неизменным при сравнении только заголовков. Если язык документа следует за заголовком, а выход остаётся на месте, значит, заголовок был решающим входом, и VPN к этому наблюдению отношения не имеет.

Для этой проверки используйте второй профиль браузера, а не переключатель языка самого сайта. Переключатель обычно записывает cookie, а это другой вход, и в итоге вы измерите cookie вместо заголовка.

Что означают значения q, а что нет

RFC 9110, раздел 12.5.4, определяет Accept-Language как список предпочтительных естественных языков ответа. Каждая запись может нести вес от 0 до 1, диапазон без веса имеет вес 1, а вес 0 помечает язык как недопустимый. Это порядок предпочтений и ничего больше.

Значение не является отчётом о местоположении, ни оценкой доверия, ни идентичностью. Сервер вправе его игнорировать, отдать единственный имеющийся перевод или позволить победить перенаправлению по стране. Согласование содержимого — это выбор сервера, а заголовок — вход для этого выбора, а не команда.

Именно это упускают, когда принимают локализованную страницу за проверку местоположения. Заголовок сообщает, на каких языках человек предпочитает читать, а предпочтение может путешествовать куда угодно.

Три входа решают, какой язык вы действительно получите

Изолируйте их по одному, потому что снаружи не видно, какой победил:

  • Заголовок. Проверьте со вторым профилем, настроенным на другой список языков, и посмотрите, меняется ли страница, пока всё остальное остаётся неизменным.
  • Сохранённый выбор. Проверьте в приватном окне без cookie или очистите хранилище сайта. Настройки аккаунта и записи localStorage могут закрепить язык на месяцы.
  • URL или перенаправление. Проверьте, запросив явный языковой путь, например /fr/, и отслеживая коды состояния перенаправления на основе адреса источника.

Выполните три проверки в этом порядке и запишите, какая сдвинула результат. Одна загрузка страницы, меняющая язык после включения VPN, — слабое доказательство, потому что и перенаправление, и кэшированный cookie могут создать такое впечатление.

Что меняет VPN, а что нет

Туннель меняет адрес источника, который видит сервер, а вместе с ним всё, что сервер выводит из IP-геолокации. Он не переписывает языковые предпочтения браузера, не удаляет сохранённую настройку и не меняет URL, который вы ввели. Эти входы остаются ровно там, где были, поэтому страница может сохранить старый язык после смещения выхода.

Геолокация добавляет собственный шум. Базы адресов противоречат друг другу, а выход, зарегистрированный в одной стране, может быть отнесён к другой, из-за чего перенаправление по стране выглядит неверным по причинам, не связанным с вашим браузером.

Быстрая проверка разделяет их: запросите страницу заново, запишите адрес, который вы представляете, и затем сравните язык ответа со своим списком заголовков. Если язык совпадает с вашим списком, а не со страной выхода, заголовок был решающим входом и в туннеле нечего исправлять.

Что доказывает локализованная страница, а что нет

Здесь есть настоящий вопрос приватности, и он меньше того, который обычно выдвигают. Полный список языковых предпочтений — это вход для создания отпечатка, и он может что-то раскрыть о том, кто вы и что читаете. Это подлинное раскрытие предпочтения, и оно не то же самое, что доказательство выхода трафика из туннеля.

Локализованная страница не является индикатором утечки. Если вы действительно хотите проверить утечку, посмотрите адрес выхода, который видит сайт, путь резолвера, используемый для поиска имён, и кандидатов, которые раскрывает стек WebRTC. Эти проверки отвечают на вопрос, на который язык страницы ответить не может.

В следующий раз, когда сайт как будто знает вашу страну, сначала откройте заголовки запроса. Если язык ответа совпадает со списком вашего браузера, ничего не утекло, и слой, на который стоит смотреть, — тот, что перед вами.

Похожие статьи