当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《HTTP重定向:301(永久)与302(临时)》经验,为你挑选了6个好方法。

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



1> Philippe Ley..:

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

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


需要记住HTTP状态代码301-> Perm和302-> Temp Redirect两个以T开头,与T临时开始相同.
究竟!事实上,根据规格,客户应该总是去新的位置.
谢谢.这是否意味着如果我使用301(永久)重定向,客户端可以决定永远不再检索旧位置,而是直接使用新URL?
@XaviMontero大多数现代浏览器缓存301,并且在最多6个月内根本不会要求原始源
但是在浏览器中,这会如何影响?例如,在后退按钮中重写历史记录,以避免回到301中的错误状态?如果点击旧书签,请在301上静默修改书签?
@Frank你有"长达6个月"部分的参考,好吗?我的网站设置了一些301,现在阻止我再次使用URL并猜测 - 我现在需要这些URL再次生效,而不是重定向.事后看来,使用301是一个糟糕的选择.但是知道代理商最终会再次检查URL很有趣.
我想用来记忆的技巧与@ScottCate的技巧类似,但有一个转折:* 301在302之前*在数字上*,就像“ ** P ** ermenant”在“ ** T ** emporary”之前*按字母顺序。 *(不相关但很有趣的事实:此技巧还适用于“ 401 ** F **禁止”又名Auth ** entic **设置错误,以及“ 403 ** U **未授权”又称为Auth ** oriz * * ation错误。)
这对搜索引擎是否有任何影响,记住您网站的某些页面现在没有链接到?

2> 小智..:

当搜索引擎蜘蛛发现在网页的响应头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



3> Residuum..:

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

有关详细信息,请参阅Peter Lee的答案.



4> Peter Lee..:

301是已经为所请求的资源分配了新的永久URI,并且任何将来对该资源的引用都应该使用返回的URI之一来完成.302是所请求的资源临时驻留在不同的URI下.由于重定向有时可能会被更改,因此客户端应该继续使用Request-URI来处理将来的请求.如果由Cache-Control或Expires标头字段指示,则此响应仅可缓存.


我现在已经有一段时间,但这是一个很好的例子.Webcomics通常有一个可以导致最新漫画的网址.如果是`webcomic.com/latest`并用301重定向到`webcomic.com/some-comic-title`,浏览器将始终重定向到"some-comic-title".即使下一部漫画已经出版,"最新"现在重定向到"另一部漫画片头"......这就是302会更好的地方.
@ BobStein-VisiBone以302重定向为例:使用代码`<?php header("location:http://example.com/new.php")创建一个文件old.php; ?>`和文件new.php - `<?php echo'我是新的'; ?>`并转到[link](http://example.com/old.php).将重定向并显示"我是新的"文本.然后将old.php中的代码替换为`<?php echo'我老了'; ?>`还可以转到[link](http://example.com/old.php).你会看到文字"我老了".如果您在old.php中执行了301重定向,那么即使在old.php的代码中发生了更改,您也会看到"我是新的"文本.
如果目标URL取决于状态,则302非常有用.
@ BobStein-VisiBone我有一个不推荐使用的页面,无法显示.我们需要制作一个新页面,但暂时还没有准备好.我们使用临时重定向到我们对访问者有用的现有页面.创建新页面后,我们将使用永久重定向.

5> Sebastian Sc..:

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/)



6> 小智..:

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

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

推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有