HTTP重定向:301(永久)与302(临时)

问题描述 投票:356回答:6

客户端应该表现得与众不同吗?怎么样?

http redirect http-status-code-301 http-status-code-302
6个回答
547
投票

状态301表示资源(页面)永久移动到新位置。客户端/浏览器不应尝试请求原始位置,而是从现在开始使用新位置。

状态302表示资源临时位于其他位置,客户端/浏览器应继续请求原始URL。


102
投票

当搜索引擎蜘蛛在网页的响应头中找到301状态代码时,它会理解该网页不再存在,它会在响应中搜索位置标题,然后选择新的URL并将索引的URL替换为新的URL并传输pagerank 。

因此,搜索引擎会使用新网址刷新所有不再存在的索引网址(找到301),这将保留您的旧网页流量,分页并将其转移到新网页(您不会丢失旧网页的流量)。

浏览器:如果浏览器找到301状态代码,则它会缓存旧URL与新URL的映射,客户端/浏览器将不会尝试请求原始位置,但从现在开始使用新位置,除非清除缓存。

当搜索引擎蜘蛛找到网页的302状态时,它将仅临时重定向到新位置并抓取两个页面。旧网页网址仍存在于搜索引擎数据库中,并始终尝试请求旧位置并对其进行抓取。客户端/浏览器仍将尝试请求原始位置。

阅读更多关于如何在asp.net c#中实现它以及对搜索引擎的影响 - http://www.dotnetbull.com/2013/08/301-permanent-vs-302-temporary-status-code-aspnet-csharp-Implementation.html


33
投票

大多数301 vs 302对于搜索引擎中的索引很重要,因为他们的抓取工具会考虑到这一点并在使用301时转移PageRank。

有关详细信息,请参阅Peter Lee's answer


19
投票

301是已经为所请求的资源分配了新的永久URI,并且应该使用返回的URI之一来完成对该资源的任何将来的引用。

302是所请求的资源临时驻留在不同的URI下。

由于重定向有时可能会更改,因此客户端应继续将Request-URI用于将来的请求。

如果由Cache-Control或Expires标头字段指示,则此响应仅可缓存。


16
投票

301重定向无限期缓存(至少某些浏览器)。

这意味着,如果您设置301,访问该页面,您不仅会被重定向,而且会重定向该重定向。

当您再次访问该页面时,您的浏览器*甚至懒得请求该URL,它只是转到缓存的重定向目标。

对于在缓存中具有该重定向的访问者撤消301的唯一方法是重新重定向回原始URL **。在这种情况下,浏览器会注意到循环,最后真正请求输入的URL。

显然,如果你决定301到Facebook或任何其他你没有完全控制的资源,这不是一个选择。

不幸的是,许多托管服务提供商在其管理界面中提供了一个简称为“重定向”的功能,该功能执行301重定向。如果您使用此功能暂时将您的域名重定向到Facebook作为即将推出的页面,那么您基本上已经搞砸了。

*根据How long do browsers cache HTTP 301s?的说法,至少Chrome和Firefox。刚刚尝试使用Chrome 45.编辑:Mac上的Safari 7.0.6也有缓存,浏览器重启没有帮助(Link说在Windows上的Safari 5上确实有帮助。)

**我尝试了javascript window.location = '',因为它可以在大多数情况下应用的解决方案 - 它不起作用。它导致一个未检测到的无限循环。然而,php header('Location: new.url')确实打破了循环

底线:如果您绝对不确定再次使用该URL,则仅使用301s。通常永远不会在根目录(example.com/)


8
投票

301的主要问题是即使您从服务器级别禁用了重定向,浏览器也会缓存重定向。

如果要为短维护窗口启用重定向,则最好使用302。

© www.soinside.com 2019 - 2024. All rights reserved.