Чому вихід VPN і мова браузера не збігаються
Accept-Language запитує мову відповіді; VPN змінює адресу джерела. Коли сайт виглядає локалізованим, три входи вирішують, який із них переміг.
Відкрийте інструменти розробника, завантажте сторінку і прочитайте заголовки запиту, перш ніж робити якісь висновки про 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. Ці перевірки відповідають на питання, на яке мова сторінки відповісти не може.
Наступного разу, коли сайт ніби знає вашу країну, спочатку відкрийте заголовки запиту. Якщо мова відповіді збігається зі списком вашого браузера, нічого не витекло, і шар, на який варто дивитися, — той, що перед вами.