我应该为多语言网站设置哪些http头


Which http headers should I set for multi language site?

我目前在一个多语言网站上工作,我的情况是:

  • 我正在将用户重定向到特定语言的页面:例如。http://www.example.com/en/或http://www.example.com/nl/
  • 在每一页上,我都使用html-lang标签:<html lang="<?php echo $lang; ?>">
  • 在每一页中,我都使用hreflang标签

根据本文和本文中的答案,我也需要设置一个http标头,但我不知道如何做到这一点,也不知道应该设置什么样的标头。是Accept-Language还是Content-Language?为多语言网站设置http头真的是必须的吗?Accept Language是请求而不是响应吗?

请帮忙!非常感谢。

为多语言网站设置http头真的是必须的吗?

来自HTTP标头、元元素和语言信息-W3.org:

在指定文本处理的语言时,您是在声明实际编写特定范围文本的语言,以便操作文本的用户代理或应用程序(如语音浏览器、拼写检查器或样式处理程序)能够有效地处理有问题的文本。

因此,从可用性的角度来看,声明页面上使用的语言以及页面预期受众的语言是有意义的。

有关如何指定,请参阅同一页:

HTTP内容语言标头可用于提供有关页面的预期受众的元数据,并可指示这是一种以上的语言。不应再使用元元素上http equiv属性的Content-Language值。您应该在html标记上使用language属性来声明页面中实际文本的默认语言。

内容语言的HTML元标签:

应该真正在标题中表达。例如:

Content-language: es

Accept-Language不是响应标头,而是请求标头,因此将Content-language同时作为响应标头和HTML元素中的<html lang="">属性,您就可以使用它了。

至于Vary: X, Y响应标头:这意味着当标头X或Y不同时,对当前请求URI的响应将不同。

例如,在进行重定向时,这一点非常重要。假设在您的登录页上,您根据Accept-Language请求标头确定重定向位置:

GET / HTTP/1.1
Host: example.com
Accept-Language: en

然后,您的网站将重定向到英文子网站:

HTTP/1.1 302 Found
Location: http://example.com/en
Vary: Accept-Language

这将告诉用户代理(浏览器、搜索引擎),用不同的Accept-Language请求相同的URI将产生不同的结果。例如:

GET / HTTP/1.1
Host: example.com
Accept-Language: es

然后,您的网站将重定向到西班牙子网站:

HTTP/1.1 302 Found
Location: http://example.com/es
Vary: Accept-Language