客户应该表现不同吗?如何?
6 回答
状态 301 表示资源(页面)被永久移动到新位置。客户端/浏览器不应尝试请求原始位置,而是从现在开始使用新位置。
状态 302 表示资源暂时位于其他地方,客户端/浏览器应继续请求原始 url。
当搜索引擎蜘蛛在网页的响应头中找到 301 状态码时,它知道该网页不再存在,它会搜索位置头作为响应,选择新的 URL 并将索引的 URL 替换为新的 URL,并传输 pagerank .
所以搜索引擎用新的URL刷新所有不再存在的索引URL(找到301),这将保留你的旧网页流量,pagerank并将其转移到新的(你不会失去旧网页的流量)。
浏览器:如果浏览器发现 301 状态码,则缓存旧 URL 与新 URL 的映射,客户端/浏览器将不再尝试请求原始位置,而是从现在开始使用新位置,除非缓存被清除。
当搜索引擎蜘蛛发现网页的 302 状态时,它只会临时重定向到新位置并抓取两个页面。旧的网页 URL 仍然存在于搜索引擎数据库中,它总是试图请求旧的位置并对其进行爬取。客户端/浏览器仍将尝试请求原始位置。
阅读更多关于如何在 asp.net c# 中实现它以及对搜索引擎有什么影响 - 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,访问该页面,您不仅会被重定向,还会缓存该重定向。
当您再次访问该页面时,您的 Browser* 甚至都不会请求该 URL,它只是转到缓存的重定向目标。
在缓存中为具有该重定向的访问者撤消 301 的唯一方法是重新重定向回原始 URL**。在这种情况下,浏览器会注意到循环,并最终真正请求输入的 URL。
显然,如果您决定 301 访问 facebook 或您未完全控制的任何其他资源,那么这不是一个选择。
不幸的是,许多托管服务提供商在他们的管理界面中提供了一个简单称为“重定向”的功能,它会执行 301 重定向。如果您使用它来临时将您的域重定向到 facebook 作为即将推出的页面,那么您基本上就完蛋了。
*至少 Chrome 和 Firefox,根据浏览器缓存 HTTP 301 多长时间?. 刚刚用 Chrome 45 尝试过。编辑:Mac 上的 Safari 7.0.6 也缓存,重新启动浏览器没有帮助(链接说在 Windows 上的 Safari 5 上它确实有帮助。)
**我尝试了 javascript window.location = ''
,因为它是可以在大多数情况下应用的解决方案 - 它不起作用。它会导致未检测到的无限循环。但是,phpheader('Location: new.url')
确实打破了循环
底线:仅当您绝对确定您永远不会再使用该 URL 时才使用 301。通常从不在根目录(example.com/)上
301 的主要问题是即使您从服务器级别禁用了重定向,浏览器也会缓存重定向。
如果您为较短的维护窗口启用重定向,则使用 302 总是更好。