Vì sao điểm ra VPN và ngôn ngữ trình duyệt không khớp nhau
Accept-Language yêu cầu ngôn ngữ trả lời; VPN thay đổi địa chỉ nguồn. Khi một trang trông đã bản địa hóa, ba đầu vào quyết định cái nào đã thắng.
Mở công cụ dành cho nhà phát triển, tải trang và đọc các header của yêu cầu trước khi kết luận bất cứ điều gì về VPN. Bạn thường sẽ thấy một dòng Accept-Language yêu cầu một tập ngôn ngữ cụ thể, và dòng đó đến từ cài đặt trình duyệt, không phải từ địa chỉ ra của bạn. Một người nói tiếng Pháp trên điểm ra ở Tokyo vẫn gửi tiếng Pháp, và một trang trả lời bằng tiếng Pháp là đang trả lời header đó. Đường hầm không rò rỉ chỉ vì trang đến bằng một ngôn ngữ quen thuộc.
Đọc header trước tiên
Trong trình duyệt máy tính, mở bảng Mạng, tải lại, nhấp vào yêu cầu tài liệu và xem bên dưới các header yêu cầu. Từ terminal bạn có thể thấy điều tương tự mà không cần trình duyệt, và có thể ghi đè giá trị để kiểm tra hành vi của trang:
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
Giờ phần thân đã nằm trên đĩa, nên so sánh là về trang chứ không phải về một header có thể không bao giờ được gửi. Hãy xem thuộc tính lang của thẻ html và văn bản hiển thị, vì Content-Language là tùy chọn và nhiều máy chủ bỏ qua nó. Vì vậy một trang chuyển toàn bộ nội dung từ tiếng Anh sang tiếng Pháp trên cùng một URL có thể trông không đổi khi chỉ so sánh header. Nếu ngôn ngữ tài liệu theo header trong khi điểm ra giữ nguyên, thì header là đầu vào quyết định và VPN không liên quan đến quan sát đó.
Dùng một hồ sơ trình duyệt thứ hai thay vì công tắc ngôn ngữ của chính trang cho bài kiểm tra này. Công tắc thường ghi một cookie, đó là đầu vào khác, và cuối cùng bạn sẽ đo cookie thay vì header.
Các giá trị q nghĩa là gì, và không nghĩa là gì
RFC 9110 mục 12.5.4 định nghĩa Accept-Language là danh sách các ngôn ngữ tự nhiên ưu tiên cho phản hồi. Mỗi mục có thể mang trọng số từ 0 đến 1, khoảng không có trọng số có trọng số 1, và trọng số 0 đánh dấu một ngôn ngữ là không chấp nhận được. Đó là thứ tự ưu tiên và không hơn gì nữa.
Giá trị không phải báo cáo vị trí, không phải điểm tin cậy và không phải danh tính. Máy chủ được tự do bỏ qua nó, phục vụ bản dịch duy nhất mà nó có, hoặc để một chuyển hướng theo quốc gia thắng. Thương lượng nội dung là lựa chọn của máy chủ, và header là đầu vào cho lựa chọn đó, không phải mệnh lệnh.
Đây là phần mọi người bỏ qua khi coi một trang đã bản địa hóa là bài kiểm tra vị trí. Header nói người đó thích đọc những ngôn ngữ nào, và sở thích có thể đi khắp nơi.
Ba đầu vào quyết định ngôn ngữ bạn thực sự nhận được
Tách riêng từng cái, vì từ bên ngoài bạn không thấy cái nào đã thắng:
- Header. Kiểm tra với một hồ sơ thứ hai được đặt sang danh sách ngôn ngữ khác, và xem trang có thay đổi không trong khi mọi thứ khác giữ nguyên.
- Lựa chọn đã lưu. Kiểm tra trong cửa sổ riêng tư không có cookie, hoặc xóa bộ nhớ của trang. Cài đặt tài khoản và các mục trong localStorage có thể ghim ngôn ngữ hàng tháng.
- URL hoặc chuyển hướng. Kiểm tra bằng cách yêu cầu đường dẫn ngôn ngữ rõ ràng, ví dụ
/fr/, và quan sát mã trạng thái của chuyển hướng dựa trên địa chỉ nguồn.
Chạy ba bài kiểm tra theo thứ tự đó và ghi lại cái nào đã làm thay đổi kết quả. Một lần tải trang đổi ngôn ngữ sau khi bạn bật VPN là bằng chứng yếu, vì cả chuyển hướng lẫn cookie được lưu trong bộ nhớ đệm đều có thể tạo ra ấn tượng đó.
VPN thay đổi điều gì và không thay đổi điều gì
Đường hầm thay đổi địa chỉ nguồn mà máy chủ nhìn thấy, và cùng với nó là mọi thứ máy chủ suy ra từ định vị IP. Nó không viết lại tùy chọn ngôn ngữ của trình duyệt, không xóa cài đặt đã lưu và không thay đổi URL bạn đã gõ. Những đầu vào đó vẫn ở đúng chỗ cũ, nên một trang có thể giữ ngôn ngữ cũ sau khi điểm ra dịch chuyển.
Định vị địa lý thêm nhiễu của chính nó. Các cơ sở dữ liệu địa chỉ không đồng ý với nhau, và một điểm ra đăng ký ở một quốc gia có thể bị gán sang quốc gia khác, khiến chuyển hướng theo quốc gia trông sai vì những lý do không liên quan gì đến trình duyệt của bạn.
Một kiểm tra nhanh tách chúng ra: yêu cầu trang mới, ghi lại địa chỉ bạn trình bày, rồi so sánh ngôn ngữ phản hồi với danh sách header của bạn. Nếu ngôn ngữ khớp với danh sách của bạn chứ không phải quốc gia điểm ra, thì header là đầu vào quyết định và không có gì phải sửa trong đường hầm.
Một trang đã bản địa hóa chứng minh điều gì và không chứng minh điều gì
Ở đây có một điểm riêng tư thực sự, và nó nhỏ hơn điểm mà mọi người thường nêu. Một danh sách đầy đủ các tùy chọn ngôn ngữ là đầu vào cho dấu vân tay và có thể tiết lộ điều gì đó về bạn là ai hoặc bạn đọc gì. Đó là sự tiết lộ sở thích thực sự, và nó không giống với việc chứng minh lưu lượng đã thoát khỏi đường hầm.
Một trang đã bản địa hóa không phải chỉ báo rò rỉ. Nếu bạn thực sự muốn kiểm tra rò rỉ, hãy kiểm tra địa chỉ ra mà trang nhìn thấy, đường đi của bộ phân giải được dùng cho tra cứu tên và các ứng viên mà một ngăn xếp WebRTC phơi bày. Những bài kiểm tra đó trả lời câu hỏi mà ngôn ngữ của trang không thể.
Lần tới khi một trang có vẻ biết quốc gia của bạn, hãy mở các header yêu cầu trước. Nếu ngôn ngữ phản hồi khớp với danh sách của trình duyệt, không có gì bị rò rỉ, và lớp cần xem là lớp ngay trước mắt bạn.