注意:本文仅供学习交流使用
Navigator 对象的语言设置可以帮助网站识别您的首选语言。网站会基于这个值,调整向您呈现内容的所用语言。与其他任意Navigator 对象值一样,它也可用于浏览器指纹识别。
1. 浏览器语言:代表浏览器界面显示的语言,如设置zh-CN,代表浏览器显示的语言为中文; 如设置en-US,代表浏览器显示的语言是美国英语。
2. Accept-Language:
是HTTP 请求里面的一个属性,用于告诉网站我的浏览器支持什么语言。 如果网站支持多语言的话,可以使用这个信息来决定返回什么语言的网页 。如:zh-CN,zh;q=0.9,表示支持中文,zh-CN 表示中文,zh表示中国地区, q表示用户对该范围指定的语言偏好估计。例:zh-CN,zh;q=0.9,en-US,en;q=0.8,意味着中文为第一语言,英文则为第二语言。
3. 浏览器“语言”和“Accept-Language”最好和使用的代理IP地区的语言保持一致。
更多参考:”语言“也可以成为浏览器指纹吗?
4、本文通过两种方式更改语言:
1、直接修改 language::prefs::kAcceptLanguages prefs值
// The value to use for Accept-Languages HTTP header when making an HTTP// request. This should not be set directly as it is a combination of// kSelectedLanguages and kForcedLanguages. To update the list of preferred// languages, set kSelectedLanguages and this pref will update automatically.inline constexpr char kAcceptLanguages[] = "intl.accept_languages";void LanguagePrefs::RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) {registry->RegisterStringPref(language::prefs::kAcceptLanguages,l10n_util::GetStringUTF8(IDS_ACCEPT_LANGUAGES),user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
在注册时候或者动态更改prefs值
2、第二种方法是直接在render 和 net进程获取 language::prefs::kAcceptLanguages代码处修改:
2.1)、前端通过navigator.language获取系统语言,数据源是language::prefs::kAcceptLanguages,
具体代码位置:
chrome\browser\renderer_preferences_util.cc
void UpdateFromSystemSettings(blink::RendererPreferences* prefs,Profile* profile) {const PrefService* pref_service = profile->GetPrefs();prefs->accept_languages = GetLanguageListForProfile(profile, pref_service->GetString(language::prefs::kAcceptLanguages));prefs->accept_languages ="en,zh-CN,zh"; //改成英文
}
prefs->accept_languages ="en,zh-CN,zh"; //改成英文
2.2)、net进程header获取语言代码:
chrome\browser\net\profile_network_context_service.cc
std::string ComputeAcceptLanguageFromPref(const std::string& language_pref) {std::string accept_languages_str =net::HttpUtil::ExpandLanguageList(language_pref);accept_languages_str = "en,zh-CN,zh"; //改成英文return net::HttpUtil::GenerateAcceptLanguageHeader(accept_languages_str);
}
accept_languages_str = "en,zh-CN,zh"; //改成英文
5、看下效果:
默认浏览器语言是中文,先将其改成英文。en,zh-CN,zh
总结:
语言最好要和IP区域对应上,否则在https://www.browserscan.net/zh/
人机检测是不过的。