Skip to content

[译] 谁正在使用 Accept-Language 请求头?

Published: at 23:07编辑

原文标题:Who uses Accept-Language header?

原文链接:https://serpapi.com/blog/who-uses-accept-language-header/

原文作者:Terry Tan

本文译者:liuzhen932,首发于 liuzhen932 的小窝

在过去的一周里,我们的 Yelp API 响应时间变得缓慢。通常只需 3.x 秒(在 Ludicrous Speed 模式下仅需 1.x 秒)的搜索请求,平均耗时却达到了 40-50 秒。那时我们并没有推送任何更新,所以我们猜测 Yelp 可能升级了他们的检测机制。在检查了我们的日志之后,我们注意到 403 - Forbidden 错误的数量在增加。我们仍然能看到一些成功的请求,但比例非常小。很明显,我们需要解决这个 403 - Forbidden 错误。

译者注:Yelp 是一家美国公司,开发 Yelp.com 网站和 Yelp 移动应用程序,该应用程序发布有关企业的众包评论。该公司还经营着 Yelp Guest Manager,这是一种餐桌预订服务。该公司的总部位于旧金山。

如果我们必须处理 Cookies 或请求头中随机生成的密钥或其他类似因素,这可能是一个复杂的问题。然而,经过几次尝试和错误之后,我们能够通过简单地添加 Accept-Language 请求头来缓解问题。

我们迅速实施并将其部署到生产环境中,现在我们的客户体验到与以前一样的快速响应。

这个解决方案有效很好,但我仍然对它背后的原因感到好奇。首先要考虑的问题是网站是否真正尊重 Accept-Language 标头。如果有,他们是什么样的网站?可能是那些拥有全球访问者的,比如 Yelp。但 Yelp 真的利用它吗?

Yelp 主页

我已经将 Firefox 中的语言设置更改为日语(因此很明显可以看到差异)并验证请求是否发送了正确的 Accept-Language: ja 标头。然而,Yelp 仍然以英文文本回应。

即使使用设置为日本的 VPN,我也观察到相同的结果。默认位置已正确设置为日本的某个位置,但响应仍为英语,得出的结论是他们实际上并没有使用标头来确定要提供的语言。

更改语言的唯一方法是访问 Yelp 提供的特定域。例如,选择 Japanese language 会将您重定向到 www.yelp.co.jp

Yelp 的日本主页

这是许多 Web 应用程序中的常见做法,它们要么将访问者重定向到该语言的特定域,要么使用类似 /ja 的路径进行区分。

有趣的是,Google 确实尊重 Accept-Language 标头。在 Yelp 域中进行测试时,Google Sign-In 小部件弹出窗口以日语显示。为了确认,我在 Google 上进行了搜索,它按预期工作。

使用 Postman 的简单测试请求也证实了这一点。

与此同时,正如我们所观察到的,Yelp 以英语出现。

互联网上有几篇关于 Accept-Language 标头的讨论(在 StackOverflow这篇文章中)。我认为结论是,在设计多语言 Web 应用程序时,考虑 Accept-Language 标头可能是一个很好的设计决策。

就 Web 抓取而言,最好在每个请求中包含通用标头:User-Agent, Accept, Accept-Encoding, Accept-Language, Connection, Cache-Control

结论

在为多种语言设计 Web 应用程序时,应遵循 Accept-Language,因为它指示用户的首选语言。其他指标,例如位置,可以在之后考虑。这有意义吗?如果您想分享您的意见,请随时与我联系。

译者注:原文作者邮箱 [email protected]


上一篇
记一次有趣的钓鱼邮件分析
下一篇
FAQ: GoNoBot