代码之家  ›  专栏  ›  技术社区  ›  flybywire

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

  •  345
  • flybywire  · 技术社区  · 15 年前

    客户的行为应该不同吗?怎么用?

    6 回复  |  直到 6 年前
        1
  •  530
  •   Philippe Leybaert    15 年前

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

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

        2
  •  97
  •   binaryfunt Tom    9 年前

    当搜索引擎蜘蛛在一个网页的响应头中发现301状态码时,它知道这个网页已经不存在了,它会在响应中搜索位置头,选择新的URL,并用新的URL替换索引的URL,同时传输pagerank。

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

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

    enter image description here

    当搜索引擎蜘蛛发现一个网页有302个状态时,它只会临时重定向到新的位置并对两个网页进行爬行。旧的网页URL仍然存在于搜索引擎数据库中,它总是尝试请求旧的位置并对其进行爬网。客户端/浏览器仍将尝试请求原始位置。

    enter image description here

    阅读有关如何在ASP.NET C中实现它以及它对搜索引擎的影响的详细信息- http://www.dotnetbull.com/2013/08/301-permanent-vs-302-temporary-status-code-aspnet-csharp-Implementation.html

        3
  •  32
  •   Cody Gray    7 年前

    在搜索引擎中,301和302对索引很重要,因为他们的爬虫程序在使用301时会考虑到这一点并转移pagerank。

    Peter Lee's answer 了解更多详细信息。

        4
  •  18
  •   76484    7 年前

    301请求的资源是否被分配了一个新的永久URI以及 将来对此资源的引用应该使用 返回的URI。 302是请求的资源临时驻留在不同的URI下。 由于重定向有时可能会被更改,客户端应该 继续为将来的请求使用请求URI。这个回答是 仅当由缓存控件或Expires头指示时才可使用 字段。

        5
  •  14
  •   Community CDub    7 年前

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

    这意味着,如果您设置了301,那么访问该页面,不仅可以重定向,而且可以缓存重定向。

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

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

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

    不幸的是,许多主机提供商在其管理界面中提供了一个简单称为“重定向”的功能,它执行301重定向。如果你用这个暂时将你的域名重定向到Facebook作为一个即将到来的页面,你基本上是完蛋了。

    *至少Chrome和火狐,根据 How long do browsers cache HTTP 301s? . 刚刚用铬45试过。 编辑:Mac上的Safari 7.0.6也会缓存,浏览器重新启动没有帮助(link说Windows上的Safari 5确实有帮助。)

    **我尝试了javascript window.location = '' 因为这将是大多数情况下可以应用的解决方案-它不起作用。它导致一个未检测到的无限循环。但是,PHP header('Location: new.url') 会破坏循环

    底线: 只有当你确信你不会再使用这个网址时,才使用301S。通常不在根目录上(example.com/)

        6
  •  8
  •   Jobin Joseph    9 年前

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

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

    推荐文章