HTTP/1.1 302 是什么意思?

155

我曾阅读一篇文章称这意味着跳转(从一个URI到另一个URI),但即使实际上并没有跳转,我也检测到了这个“302”!


1
这里可能有一些关于此问题的好信息,可以在wc3.org文档中找到(http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.3)。 - Copas
2
请注意:http://example.com、http://www.example.com和http://www.example.com/在逻辑上是不同的,如果一个网站希望通过单个URL访问,则可以从一个URL重定向到另一个URL以实现此目的。当然,302重定向并不是一个好选择...但你可能已经看到了类似微妙的变化。 - Shog9
请参考此网站(https://hostingpill.com/http-302-error/)。 - virusarthak
16个回答

89

302重定向意味着页面被暂时移动,而301意味着它被永久移动。

301对于SEO价值很好,而302则不是,因为301指示客户端忘记原始URL的价值,而302保留了原始URL的价值,因此可能通过创建两个逻辑上不同但产生相同内容的URL来降低其价值(搜索引擎将视它们为不同的重复资源而不是具有两个名称的单个资源)。


87

这个问题很久以前就被提出了,当时RFC 2616还存在。对于这个问题的一些答案基于该文档,但是现在已经不再相关了。引用Mark Nottingham的话,在撰写本文时,他是IETF HTTP和QUIC工作组的联合主席:

不要使用RFC 2616。从硬盘、书签中删除它,并烧掉(或负责地回收)任何打印出来的副本。

旧的RFC 2616已被以下文件取代,这些文件一起定义了HTTP/1.1协议:

截至2022年6月,一组新的RFC文档取代了上述文档:

因此,我旨在提供基于RFC 9110的答案,这是当前HTTP语义的参考。

302状态码

使用302响应是执行URL重定向的常见方式。除了302状态码外,响应还应包括具有不同URI的Location头。该头将由用户代理解析,然后执行重定向:


Redirection example


网络浏览器在后续请求中可能会从 POST 更改为 GET。如果不希望出现这种行为,则可以使用 307(临时重定向)状态码。

RFC 9110 中定义了 302 状态码的含义:

6.4.3. 302 Found

状态码302(已找到)表示目标资源在不同的URI下临时驻留。由于重定向可能会不时地改变,因此客户端应继续使用目标URI进行未来的请求。

服务器应生成一个响应中包含不同URI的URI引用的Location标头字段。用户代理可以使用Location字段值进行自动重定向。服务器的响应内容通常包含一条短的超文本注释,其中包含指向不同URI的超链接。

注意:由于历史原因,用户代理可以将请求方法从POST更改为随后的GET。如果不希望出现这种行为,则可以使用307(临时重定向)状态代码替代。

根据Mozilla的MDN Web文档302的典型用例是:

网页由于未预料的原因暂时不可用。这样,搜索引擎就不会更新它们的链接。

其他重定向状态码

RFC 9110定义了以下有关重定向的状态码(其中一些状态码最初是在其他RFC中定义的,但全部已经被整合到RFC 9110中):

  • 301:永久性移动
  • 302:找到
  • 307:临时重定向
  • 308:永久重定向

欲知详情,请参考answer


4
感谢你,我的痛苦已经结束了(Location 头信息帮了我大忙)。原来我在使用 http 调用服务,而服务已经切换到了 https,所以我得到的响应只有 302。当我看到这里的 Location 头信息时,我意识到了 http/https 的区别。谢谢! - Eugene
我遇到了同样的错误原因。我的Javascript指向了错误的https位置,导致重定向失败。感谢您的评论。 - Max

27

简单来说,HTTP 301和302重定向的区别是:

假设您有一个书签链接到“http://sample.com/sample”,然后使用浏览器访问该链接。

此时,如果出现302重定向到另一个URL,意味着您应该保留原有的书签链接“http://sample.com/sample”,因为目标URL可能在将来发生变化。

但如果是301重定向到另一个URL,则意味着该重定向是永久性的,您需要更新原有书签链接指向新的URL。


9

来自RFC 2616(超文本传输协议规范)

10.3.3 302 Found
所请求的资源暂时位于不同的URI下。 由于重定向可能会不时更改,因此客户端应继续使用Request-URI进行未来的请求。 只有在Cache-Control或Expires标头字段指示的情况下,此响应才是可缓存的。
临时URI应在响应中的Location字段中给出。 除非请求方法为HEAD,否则响应实体应包含一条简短的超文本注释,其中包含到新URI的超链接。

来源:

http://www.ietf.org/rfc/rfc2616.txt


RFC2616现在已经过时,绝对不应再遵循。 - Hugh W

8

来自维基百科:

HTTP响应状态码302 Found是执行重定向的最常见方式。这是一种违反标准的工业实践示例。


5
在SEO的术语中,301和302都是很好的,这取决于情况。
如果只能返回一个版本(即另一个重定向到它),那就太好了!这种行为非常有益,因为它减少了重复内容。特别是在重定向到斜杠URL的情况下,我们的搜索结果通常会显示具有200响应代码的URL版本(最常见的是带斜杠的URL)--而不管重定向是301还是302。

5
根据http状态码定义,302表示(临时)重定向。 “所请求的资源暂时驻留在不同的URI下”。

5

302是一种响应,表示资源位置已更改 - "Found"。

现在应该在响应的“Location”标头中输入资源的url位置。

“跳转”应该由请求方(在响应Location标头字段中为资源url发起新请求)完成。


3

1
根据RFC 1945/超文本传输协议 - HTTP / 1.0的描述:
   302 Moved Temporarily

   The requested resource resides temporarily under a different URL.
   Since the redirection may be altered on occasion, the client should
   continue to use the Request-URI for future requests.

   The URL must be given by the Location field in the response. Unless
   it was a HEAD request, the Entity-Body of the response should
   contain a short note with a hyperlink to the new URI(s).

   If the 302 status code is received in response to a request using
   the POST method, the user agent must not automatically redirect the
   request unless it can be confirmed by the user, since this might
   change the conditions under which the request was issued.

       Note: When automatically redirecting a POST request after
       receiving a 302 status code, some existing user agents will
       erroneously change it into a GET request.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接