原文标题: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 真的利用它吗?
我已经将 Firefox 中的语言设置更改为日语(因此很明显可以看到差异)并验证请求是否发送了正确的 Accept-Language: ja
标头。然而,Yelp 仍然以英文文本回应。
即使使用设置为日本的 VPN,我也观察到相同的结果。默认位置已正确设置为日本的某个位置,但响应仍为英语,得出的结论是他们实际上并没有使用标头来确定要提供的语言。
更改语言的唯一方法是访问 Yelp 提供的特定域。例如,选择 Japanese language 会将您重定向到 www.yelp.co.jp
。
这是许多 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
,因为它指示用户的首选语言。其他指标,例如位置,可以在之后考虑。这有意义吗?如果您想分享您的意见,请随时与我联系。
译者注:原文作者邮箱 terry@serpapi.com