我曾阅读一篇文章称这意味着跳转(从一个URI到另一个URI),但即使实际上并没有跳转,我也检测到了这个“302”!
我曾阅读一篇文章称这意味着跳转(从一个URI到另一个URI),但即使实际上并没有跳转,我也检测到了这个“302”!
302重定向意味着页面被暂时移动,而301意味着它被永久移动。
301对于SEO价值很好,而302则不是,因为301指示客户端忘记原始URL的价值,而302保留了原始URL的价值,因此可能通过创建两个逻辑上不同但产生相同内容的URL来降低其价值(搜索引擎将视它们为不同的重复资源而不是具有两个名称的单个资源)。
这个问题很久以前就被提出了,当时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
头。该头将由用户代理解析,然后执行重定向:
网络浏览器在后续请求中可能会从 POST
更改为 GET
。如果不希望出现这种行为,则可以使用 307
(临时重定向)状态码。
状态码
302
(已找到)表示目标资源在不同的URI下临时驻留。由于重定向可能会不时地改变,因此客户端应继续使用目标URI进行未来的请求。服务器应生成一个响应中包含不同URI的URI引用的
Location
标头字段。用户代理可以使用Location
字段值进行自动重定向。服务器的响应内容通常包含一条短的超文本注释,其中包含指向不同URI的超链接。注意:由于历史原因,用户代理可以将请求方法从
POST
更改为随后的GET
。如果不希望出现这种行为,则可以使用307
(临时重定向)状态代码替代。
根据Mozilla的MDN Web文档,302
的典型用例是:
网页由于未预料的原因暂时不可用。这样,搜索引擎就不会更新它们的链接。
RFC 9110定义了以下有关重定向的状态码(其中一些状态码最初是在其他RFC中定义的,但全部已经被整合到RFC 9110中):
欲知详情,请参考answer。
Location
头信息帮了我大忙)。原来我在使用 http
调用服务,而服务已经切换到了 https
,所以我得到的响应只有 302
。当我看到这里的 Location
头信息时,我意识到了 http/https
的区别。谢谢! - Eugene简单来说,HTTP 301和302重定向的区别是:
假设您有一个书签链接到“http://sample.com/sample”,然后使用浏览器访问该链接。
此时,如果出现302重定向到另一个URL,意味着您应该保留原有的书签链接“http://sample.com/sample”,因为目标URL可能在将来发生变化。
但如果是301重定向到另一个URL,则意味着该重定向是永久性的,您需要更新原有书签链接指向新的URL。
10.3.3 302 Found
所请求的资源暂时位于不同的URI下。 由于重定向可能会不时更改,因此客户端应继续使用Request-URI进行未来的请求。 只有在Cache-Control或Expires标头字段指示的情况下,此响应才是可缓存的。
临时URI应在响应中的Location字段中给出。 除非请求方法为HEAD,否则响应实体应包含一条简短的超文本注释,其中包含到新URI的超链接。
来源:
302是一种响应,表示资源位置已更改 - "Found"。
现在应该在响应的“Location”标头中输入资源的url位置。
“跳转”应该由请求方(在响应Location标头字段中为资源url发起新请求)完成。
HTTP状态码302表示重定向,详情请参见http://en.wikipedia.org/wiki/HTTP_302。
它告诉浏览器读取的页面需要到另一个页面加载。它的使用非常普遍。
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.