使用哪种Http重定向状态码?

4
  • friendfeed.com使用302。
  • bit.ly使用301。

我已决定使用303。

它们在浏览器支持方面有不同的表现吗?

5个回答

4
这取决于您的目的。
301表示“这不是正确的URL,请查看其他位置并记住其他URL更好;不要再回到这里!”
302表示“这是应该继续使用的正确URL,但要获取内容,请查看其他位置”。
303类似于302,但专门用于表单提交后的重定向。
如果您的目的是URL缩短,则303并不是非常相关。它仍然可以工作,但与普通的302相比没有任何优势。对于URL缩短器,我认为301最合适,因为其他URL是“真实”的URL。说302是想保留地址的所有权和由其使用引起的任何SEO动力:有点粗鲁,但也许您想要粗鲁一些。

302 状态码完美符合我的需求(带有 Cache-Control: private)。 - Jacques René Mesrine

2
不同的状态码有不同的含义。HTTP规范对它们进行了描述:http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html 301 - 永久移动(并更改)
302 - 在此处找到
303 - 在此处找到响应,但使用GET,即使您最初使用POST
例如,如果我们考虑Atom feed因某种原因(可能是被移动到Amazon S3或其他地方)而更改URL。给定301结果,feed阅读器应注意到feed已移动并更新其订阅。给定302,它将从新位置获取feed,但每次检查更新时都会命中原始服务器以查找原始URI。(在这种情况下使用303是愚蠢的)。

2

阅读http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html以获取答案。

10.3.2 301 Moved Permanently

所请求的资源已被指定一个新的永久性URI,将来对该资源的任何引用都应使用返回的URI之一。具有链接编辑功能的客户端应尽可能自动重新链接到服务器返回的一个或多个新引用中的Request-URI。除非另有指示,否则此响应是可缓存的。

10.3.3 302 Found

所请求的资源暂时驻留在不同的URI下。由于重定向可能会不时更改,因此客户端应继续使用Request-URI进行未来的请求。只有在Cache-Control或Expires头字段指示的情况下,此响应才可缓存。


1

我认为302是临时重定向,301是永久性的。但我同意这取决于发帖者想要实现什么目标。 - Steffen
@David 和 @Steffen 都是对的,我想表达的是关于永久性的而不是临时性的。谢谢。 - dove
1
我仍然不认同那些蛇油专家建议你做你想做的事情的说法。 - Quentin
@David 我听到你的意见了,但通常情况下这取决于具体情况。如果我想要移动一个站点树甚至是到一个新域名,那么最好明确地告诉所有机器人你的重定向意图,或者如果程序员正在使用已更改的URL,则如果代码正确,他可能会更好地知道下一步该怎么做。 - dove
你能详细解释一下“被所有SEO专家推荐”吗?他们提到了哪些原因呢? - YakovL
@YakovL 好的,我已经添加了引用和归属。 - dove

1

请查看HTTP 1.1状态码定义。不同的状态码意味着不同的含义,因此鼓励不同的行为。尝试使用最符合您用例的代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接