客户端应该表现得与众不同吗?怎么样?
状态301表示资源(页面)永久移动到新位置.客户端/浏览器不应尝试请求原始位置,而是从现在开始使用新位置.
状态302表示资源临时位于其他位置,客户端/浏览器应继续请求原始URL.
当搜索引擎蜘蛛发现在网页的响应头301状态码,它知道这个网页已不存在,它会搜索位置头响应挑选新网址,并与更换新的索引网址,并转移的PageRank .
所以搜索引擎刷新不再存在(301中)和新的URL的所有索引的URL,这将保留您的旧的网页流量,PageRank和它转移到新的(你不会失去你的老网页的流量).
浏览器:如果浏览器找到301状态代码,则它会缓存旧URL与新URL的映射,客户端/浏览器将不会尝试请求原始位置,但从现在开始使用新位置,除非清除缓存.
当搜索引擎蜘蛛找到网页的302状态时,它将仅临时重定向到新位置并抓取两个页面.旧网页网址仍存在于搜索引擎数据库中,并始终尝试请求旧位置并对其进行抓取.客户端/浏览器仍将尝试请求原始位置.
阅读更多关于如何在asp.net中实现它的信息以及对搜索引擎的影响 - http://www.dotnetbull.com/2013/08/301-permanent-vs-302-temporary-status-code-aspnet -csharp-Implementation.html
大多数301 vs 302对于搜索引擎中的索引很重要,因为他们的抓取工具会考虑到这一点并在使用301时转移PageRank.
有关详细信息,请参阅Peter Lee的答案.
301是已经为所请求的资源分配了新的永久URI,并且任何将来对该资源的引用都应该使用返回的URI之一来完成.302是所请求的资源临时驻留在不同的URI下.由于重定向有时可能会被更改,因此客户端应该继续使用Request-URI来处理将来的请求.如果由Cache-Control或Expires标头字段指示,则此响应仅可缓存.
301重定向无限期缓存(至少某些浏览器).
这意味着,如果您设置301,访问该页面,您不仅会被重定向,而且会重定向该重定向.
当您再次访问该页面时,您的浏览器*甚至懒得请求该URL,它只是转到缓存的重定向目标.
对于在缓存中具有该重定向的访问者撤消301的唯一方法是重新重定向回原始URL**.在这种情况下,浏览器会注意到循环,最后真正请求输入的URL.
显然,如果你决定301到Facebook或任何其他你没有完全控制的资源,这不是一个选择.
不幸的是,许多托管服务提供商在其管理界面中提供了一个简称为"重定向"的功能,该功能执行301重定向.如果您使用此功能暂时将您的域名重定向到Facebook作为即将推出的页面,那么您基本上已经搞砸了.
*至少Chrome和Firefox,根据浏览器缓存HTTP 301s多长时间?.刚尝试使用Chrome 45.编辑:Mac上的Safari 7.0.6也有缓存,浏览器重启没有帮助(Link说在Windows上的Safari 5上确实有帮助.)
**我尝试了javascript window.location = ''
,因为它可以在大多数情况下应用的解决方案 - 它不起作用.它导致一个未检测到的无限循环.但是,php header('Location: new.url')
确实打破了循环
底线:如果您绝对不确定再次使用该URL,则仅使用301s.通常永远不会在根目录(example.com/)
301的主要问题是即使您从服务器级别禁用了重定向,浏览器也会缓存重定向.
如果要为短维护窗口启用重定向,则最好使用302.