代码之家  ›  专栏  ›  技术社区  ›  Michael Ekoka

REST:HTTP代码300是否适合这种重定向情况?

  •  5
  • Michael Ekoka  · 技术社区  · 14 年前

    我有一个多地区的网站。我需要重定向用户到他们的区域设置时,他们访问的网站没有在URL中的区域设置代码。

    例如

    http://www.mysite.com 自动重定向到 http://www.mysite.com/uk http://www.mysite.com/us

    我在看 rfc2616 我犹豫着使用代码300(多种选择):

    请求的资源对应于 陈述,每个陈述都有自己的特定位置和代理- 提供受驱动的谈判信息(第12节),以便 用户(或用户代理)可以选择首选的表示形式,并且 将其请求重定向到该位置。

    除非是头请求,否则响应应包括一个实体 包含资源特征和位置列表 用户或用户代理可以选择最合适的一个。这个 实体格式由“内容类型”标题字段中给定的媒体类型指定。

    根据用户代理的格式和功能,可以自动选择最合适的选项。但是,本规范没有为此类自动选择定义任何标准。

    如果服务器有一个首选的表示方式,它应该 在位置中包含该表示形式的特定URI 田野;

    我想我能理解,但是措辞对我来说还是有点神秘。熟悉响应代码的人能否确认我是否在正确的轨道上并解释以下摘录?

  • 正在提供[…]和代理驱动的协商信息[…]
  • 除非是头请求,否则响应应包括包含资源特征和位置列表的实体[…]
  • 2 回复  |  直到 14 年前
        1
  •  1
  •   Darrel Miller    14 年前

    在你的情况下,我不认为你想要“代理驱动的谈判”。在您的情况下,服务器应该能够从accept lang头中选择重定向位置。我想你可以使用303重定向。

    代理驱动的协商仅在服务器不知道客户机需要什么表示时使用。在这些情况下,服务器将返回具有不同可用选项的链接列表。然后,代理将选择所需的表示。

    如果需要一些JavaScript代码来处理300响应,并向用户显示选项列表,以便用户可以选择所需的语言,那么可以使用代理驱动的协商。

        2
  •  0
  •   annakata    14 年前

    我相信这是正确的回答,是的。事实上,我认为这是唯一的选择,如果你想把它作为一个响应来处理(例如,不能进行地理查找),因为所有其他3xx范围的响应都是用于确定结果(除了奇怪的305代理)。

    摘要部分:

    …和代理驱动的谈判 正在提供信息…

    这里的目的是表示,在所做的选择中,选择是基于用户代理的特性(潜在的变化是无限的),这些特性通常在接受头和用户代理头中传递。协商可能是一个有点令人困惑的术语,但它所指的概念是代理和服务器之间确定哪种响应是适当的。

    除非是一个总的要求, 响应应包括实体 包含资源列表 特征和位置…

    head请求被设计为只返回响应头(这样您就可以做一些事情,比如便宜地检查内容更新)。因此,他们特别不需要一个响应主体,因此不需要提供300个潜在选择的列表,以获得或发布请求。