客户端应该采取不同的行为吗?怎么样?
答案 0 :(得分:541)
状态301表示资源(页面)永久移动到新位置。客户端/浏览器不应尝试请求原始位置,而是从现在开始使用新位置。
状态302表示资源暂时位于其他位置,客户端/浏览器应继续请求原始网址。
答案 1 :(得分:101)
当搜索引擎蜘蛛在网页的响应标题中找到301状态代码时,它会理解该网页不再存在,它会在响应中搜索位置标题,然后选择新的网址并将索引的网址替换为新网址。也转移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
答案 2 :(得分:33)
大多数301 vs 302对于搜索引擎中的索引很重要,因为他们的抓取工具会考虑到这一点,并在使用301时转移PageRank。
有关详细信息,请参阅Peter Lee's answer。
答案 3 :(得分:19)
301是已为所请求的资源分配了一个新的永久URI,并且应该使用其中一个返回的URI完成对该资源的任何后续引用。
302是请求的资源暂时驻留在不同的URI下。
由于重定向有时可能会被更改,因此客户端应继续使用Request-URI进行将来的请求。
如果由Cache-Control或Expires标头字段指示,则此响应仅可缓存。
答案 4 :(得分:15)
无限期缓存301重定向(至少某些浏览器)。
这意味着,如果您设置301,访问该页面,您不仅会被重定向,而且会重定向该重定向。
当您再次访问该页面时,您的浏览器*甚至懒得请求该URL,它只是转到缓存的重定向目标。
在缓存中为具有重定向的访问者撤消301的唯一方法是重新重定向回原始URL **。在这种情况下,浏览器会注意到循环,最后真正请求输入的URL。
显然,如果您决定将301转换为Facebook或任何其他资源而不是完全受控制,那么这不是一种选择。
不幸的是,许多托管服务提供商在其管理界面中提供了一个名为“重定向”的功能,该功能执行301重定向。如果您使用此功能暂时将您的域名重定向到Facebook即将推出的页面,那么您基本上已经搞砸了。
根据{{3}},*至少是Chrome和Firefox。刚尝试使用Chrome 45。 编辑:Mac上的Safari 7.0.6也有缓存,浏览器重启没有帮助(Link说在Windows上的Safari 5上确实有帮助。)
**我尝试了javascript window.location = ''
,因为它可以在大多数情况下应用的解决方案 - 它不起作用。它导致一个未检测到的无限循环。但是,php header('Location: new.url')
确实打破了循环
底线:如果您绝对不确定再次使用该网址,则仅使用301。通常永远不会在根目录(example.com /)
答案 5 :(得分:8)
301的主要问题是,即使您从服务器级禁用了重定向,浏览器也会缓存重定向。
如果要为短维护时段启用重定向,最好使用302。