HTTP/1.1302到底是什么意思?

我读过的一些文章说,这意味着跳转(从一个 URI 到另一个) ,但我检测到这个“302”,即使实际上根本没有跳转!

538570 次浏览

来自 维基百科:

HTTP 响应状态代码302 发现是最常见的方式 执行重定向。这是一个 工业实践的范例 与标准不符。

HTTP 代码302用于重定向,请参见 http://en.wikipedia.org/wiki/HTTP_302

它告诉正在阅读一个页面的浏览者去别的地方加载另一个页面。

302重定向表示页被临时移动,而301表示页被永久移动。

301对搜索引擎优化有好处,而302则不然,因为301指示客户忘记了原始 URL 的价值,而302保留了原始 URL 的价值,因此可以通过创建两个逻辑上不同的 URL,每个 URL 产生相同的内容(搜索引擎将它们视为不同的副本,而不是一个有两个名称的单一资源) ,从而潜在地降低了价值。

根据 http status code definitions,a 302表示(临时)重定向。 “请求的资源暂时驻留在不同的 URI 下”

302是一个响应,表示资源位置的变化-“发现”。

资源现在应该位于的 URL 应该位于响应“ Location”头中。

“跳转”应该由请求客户端完成(在响应 Location 头字段中向资源 URL 发出新请求)。

查看 HTTP 301和302重定向的一个简单方法是:

假设你有一个“ http://sample.com/sample”的书签,你用浏览器去那里。

此时,302重定向到另一个 URL 将意味着您应该将书签保留为“ http://sample.com/sample”。这是因为目标 URL 将来可能会更改。

一个301重定向到一个不同的 URL 将意味着您的书签应该更改为指向新的 URL,因为它是一个永久重定向。

来自 Rfc2616(超文本传输协议规格):

10.3.3 302 Found


The requested resource resides temporarily under a different URI.
Since the redirection might be altered on occasion, the client SHOULD
continue to use the Request-URI for future requests.  This response
is only cacheable if indicated by a Cache-Control or Expires header
field.


The temporary URI SHOULD be given by the Location field in the
response. Unless the request method was HEAD, the entity of the
response SHOULD contain a short hypertext note with a hyperlink to
the new URI(s).

来源:

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

在搜索引擎优化方面,301和302都是好的,这要看情况,

如果只能返回一个版本(即,另一个版本重定向到它) ,那就太好了!这种行为是有益的,因为它减少了重复的内容。在重定向到尾部斜杠 URL 的特殊情况下,我们的搜索结果可能会显示带有200响应代码(通常是尾部斜杠 URL)的 URL 版本——不管重定向是301还是302。

根据 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.

这个问题很久以前就有人问过了,当时 RFC 2616还在使用。这个问题的一些答案是基于这样的文件,这已经不再相关了。引用 Mark Nottingham的话,在撰写本文时,他是 IETF HTTP 和 QUIC 工作组的联合主席:

不要使用 RFC2616 。从硬盘驱动器、书签中删除它,烧掉(或负责任地回收)所有打印出来的副本。

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

而且,截至2022年6月,一套新的区域自由贸易协定废止了上述文件:

因此,我的目标是提供一个基于 RFC 9110的答案,RFC 9110是 HTTP 语义的当前参考。

302状态码

使用 302进行响应是执行 URL 重定向的常用方法。除了 302状态代码之外,响应还应该包含一个具有不同 URI 的 Location头。这样的头将由用户代理解析,然后执行重定向:


Redirection example


在随后的请求中,Web 浏览器可能从 POST更改为 GET。如果不需要此行为,则可以使用 307(临时重定向)状态代码。

以下是 302状态码在 RFC 9110中的定义:

6.43.302发现

302(发现)状态代码指示目标资源 暂时位于不同的 URI 之下 客户应继续使用 未来请求的目标 URI。

服务器应该在响应中生成一个 Location头字段 包含不同 URI 的 URI 引用 使用 Location字段值进行自动重定向 响应内容通常包含一个简短的超文本说明 指向不同 URI 的超连结。

注意: 由于历史原因,用户代理可能会更改 请求方法从 POST传递到 GET,用于后续请求 此行为是不希望的,307(临时重定向)状态 可以使用代码代替。

根据 来自 Mozilla 的 MDN 网络文档,[ 302]302]的典型用例是:

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

用于重定向的其他状态代码

RFC 9110为重定向定义了以下状态代码(其中一些状态代码最初是在其他 RFC 中定义的,但是已经在 RFC 9110中统一了) :

详情请参阅此 回答

  • 代码302表示 临时改变方向
  • 区别于301重定向的一个最显著的特性是,在302重定向的情况下,SEO 的优势不会转移到一个新的 URL。
  • 这是因为这种重定向被设计用于需要将内容重定向到不是最终内容的页面时。因此,一旦消除了重定向,原始页面就不会失去在 Google 搜索引擎中的位置。

尽管我们发现自己需要302重定向的情况并不常见,但在某些情况下,这个选项可能非常有用。这些是最常见的情况:

  • 当我们意识到页面上有一些不恰当的内容时。当我们解决这个问题时,我们可以将用户重定向到另一个可能感兴趣的页面。
  • 如果我们的网站遭到攻击需要修复 这个重定向可以帮助我们最小化 发生率。

重定向302是一种代码,它告诉特定 URL 的访问者该页面已被临时移动,并将他们直接指向新位置。

  • 换句话说,当 Google 机器人或其他搜索引擎请求加载特定页面时,会激活重定向302。此时,由于这个重定向,服务器返回一个自动响应,指示一个新的 URL。

  • 这样,搜索引擎既避免了错误,也避免了烦恼 和用户,保证平稳的导航

有关详细信息,请参阅此 文章

302状态代码是 HTTP 响应状态代码,表示请求的资源已暂时移动到不同的 URI。由于位置或当前重定向指令在将来可能会更改,因此接收到302Find 响应代码的客户机应该继续使用原始 URI 处理未来的请求。

使用这个状态代码的 HTTP 响应将在标题字段 Location 中提供一个 URL。这是邀请用户代理(例如 web 浏览器)再次请求位置字段中指定的新 URL,否则请求内容完全相同。最终结果是重定向到新 URL。

对于那些可能对命名感到好奇的人,我想补充的是,它可能被称为“发现”,因为用户想要接收的主要资源(例如,一个私有网页)在那个时候是不可用的(例如,用户还没有证明他们的身份) ,所以服务器有 发现一个新的资源,用户可以接收(这是一个登录页面在最常见的情况下)。

另外,在捉迷藏的方式下,它是“迷失和被发现”的,这意味着在302状态下丢失的资源只丢失了 暂时的,它不应该永远丢失(除非玩家有一些不好的意图;)。

首先让我们来看一个场景301和302是如何工作的

  1. 301-> 永久移居

假设有一些资源,比如—— > http://hashcodehub.com/user,现在在将来我们将资源名称改为 user-info —— > 现在 URL 应该是 http://hashcodehub.com/user-info—— > 但是用户仍然试图访问相同的 URL —— > http://hashcodehub.com/user—— > 这里从后端我们可以将用户重定向到新的 URL 并将状态码发送为301—— > 用于永久移动。

上面我已经解释了301是如何工作的

让我们了解302将如何在现实生活中使用

  1. 302-> 临时重定向 -> 这里不需要更改完整的 URL,但是由于某种原因,我们将重定向到不同位置的资源。在位置标头字段中,我们将给出新资源 URL 浏览器的值,将再次请求响应位置标头字段中的资源 URL。

  2. 可以使用302只是以防万一,如果有一些不适当的内容在我们的网页。当我们解决这个问题的时候,我们可以将所有的用户重定向到一些临时的 url 并修复这个问题。

  3. 它也可以使用,如果有一些附加在网站和一些网页需要恢复,在这种情况下,我们也可以重定向用户到不同的资源。

  4. 例如,重定向302可以提供不同语言版本的主页。主要的一个可以是英语; 但是如果访问者来自其他国家,那么这个系统会自动重定向他们到他们的语言页面。

302: 当您试图加载的资源或页面被 暂时的移动到不同的位置时(通过302重定向) ,就会发生这种状态代码。

我知道302有一些用例,我认为这是非常合适的意思是 临时改变方向,相比之下,http-> https 是 永久的

  1. Google 使用302将他们的服务重定向到与你对应的语言/国家的版本。

  2. Cdn (例如 npm 使用的 unpkg.com)使用302将文件重定向到其当前/精确版本,该版本将在未来发生变化。

  3. 当一个电子商务网站有一个季节性的促销活动,它想显示在这段时间,但回到原来的页面其他时间。