1

我有一个网页,当登陆时,它将检测用户的物理位置,然后将它们重定向到最适合用户的页面。

此重定向应使用什么 HTTP 状态代码?

4

3 回答 3

1

如果请求者有一个 URI 可以让他们在没有重定向的情况下到达同一个地方,那么 303 是有意义的(正如 sjstrutt 回答的那样),因为他们应该使用新位置的 URI。如果没有,302 对我来说是有意义的,因为他们应该继续使用 Request-URI 来处理未来的请求,因为您随后会将他们重定向到缺少他们本来可以请求的 URI 的位置。

以下是w3.org所说的关于 302 状态代码的内容:

10.3.3 302 找到

请求的资源临时驻留在不同的 URI 下。 由于重定向有时可能会改变,客户端应该继续使用 Request-URI 来处理未来的请求。此响应仅在由 Cache-Control 或 Expires 标头字段指示时才可缓存。

临时 URI 应该由响应中的 Location 字段给出。除非请求方法是 HEAD,否则响应的实体应该包含一个简短的超文本注释,其中包含指向新 URI 的超链接。

如果收到 302 状态代码以响应 GET 或 HEAD 以外的请求,除非用户可以确认,否则用户代理不得自动重定向请求,因为这可能会改变发出请求的条件。

...

强调我的。

As an aside: CodeIgniter's redirect() function defaults to 302, but mentions a 301 might be used for search engine redirects. Obviously that was their decision, but I figured I would throw that into the mix as it is a widely used web framework and I assume they have put some thought into it.

于 2012-06-22T20:50:00.973 回答
1

The appropriate response status code for a successful content negotiation is either 301, 302, or 307, depending on whether the redirect is permanent or only temporary.

But in any case, server-driven negotiation should always state which information the decision was based on. In HTTP, it’s the Vary response header field that specifies a list of request header fields that were used in this process.

Unfortunately, the client’s IP address (I guess you’re translating those into geolocation information) is not an option here. So a permanent redirect is not an option either, unless you indicate the response not to be cached, otherwise it could be cached by clients or intermediary proxies. So I would either use 302 or 307.

于 2012-06-22T21:24:08.167 回答
-2

我相信 HTTP 303 可能是最适合这种情况的状态代码,尽管它可能与 HTTP 1.1 之前的客户端不兼容。

HTTP 303状态代码指出(注意:我将我认为最重要的部分加粗): 可以在不同的 URI 下找到对请求的响应,并且应该使用该资源上的 GET 方法检索。此方法的存在主要是为了允许 POST 激活脚本的输出将用户代理重定向到选定的资源。新的 URI 不是原始请求资源的替代引用。303 响应不能被缓存,但对第二个(重定向)请求的响应可能是可缓存的。

于 2012-06-22T20:34:18.750 回答