302与303的示例


Answers:


35

您链接到的页面上的描述似乎可以描述其预期目的:

302重定向表示重定向是临时的 -客户端应在以后的请求中重新检查原始URL。

303重定向用于将POST请求重定向到GET资源(否则,客户端假定对新位置的请求方法与对原始资源的请求方法相同)。

如果您要重定向客户端作为Web应用程序的一部分,但希望它们始终从Web应用程序启动(例如,URL缩短器),则302重定向似乎很有意义。303重定向用于当您POST从客户端接收数据时(例如,表单提交),并且您希望将它们重定向到要使用GET代替的新网页POST(例如,标准页面请求)。

但是请从状态码定义中查看此注释-大多数客户端将对302或303做相同的事情:

  Note: RFC 1945 and RFC 2068 specify that the client is not allowed
  to change the method on the redirected request.  However, most
  existing user agent implementations treat 302 as if it were a 303
  response, performing a GET on the Location field-value regardless
  of the original request method. The status codes 303 and 307 have
  been added for servers that wish to make unambiguously clear which
  kind of reaction is expected of the client.

4
清楚但错误。303重定向不是永久的。RFC声明“不得响应303响应”。您在此处给出的说明与301重定向匹配。
拉达达达

2
Mea culpa。我落后了301和303。我已经更新了答案。
larsk's

现在有308个
Miranda

我认为建议303将POST重定向到GET是“故意的”,这有点误导。该规范建议303进一步涉及通过最初请求的方法来表示资源的可用性。例如,如果我有一个仅受身份验证的用户使用的受权限保护的大映像,则可以使用303将未经身份验证的用户重定向到较小的映像。在这种情况下使用的请求方法无关紧要。
beaudet

RFC说:“存在此方法主要是为了允许POST激活脚本的输出将用户代理重定向到所选资源。” 和“对请求的响应可以在不同的URI下找到,并且应该使用该资源上的GET方法进行检索”。我认为这与我所说的(很多年前)差不多,但是我敢肯定还有解释的余地​​。
幼虫

15

有四种不同的重定向类型(当前)。最初只有两个,但是大多数客户端错误地实现了302重定向,因此又添加了两个以阐明接收302时两种不同可能行为之间的区别。

您链接的RFC在302重定向的部分中对此进行了说明:

  Note: RFC 1945 and RFC 2068 specify that the client is not allowed
  to change the method on the redirected request.  However, most
  existing user agent implementations treat 302 as if it were a 303
  response, performing a GET on the Location field-value regardless
  of the original request method. The status codes 303 and 307 have
  been added for servers that wish to make unambiguously clear which
  kind of reaction is expected of the client.
  1. 301重定向是永久重定向。它是可缓存的,并且该URL的所有书签都应更新为指向新URL。
  2. 302重定向是临时重定向。默认情况下,它是不可缓存的,应该每次都重新请求它(但是您可以使用缓存头将其覆盖)。后续请求应使用与原始请求相同的方法(POST,GET,CONNECT,PUT,DELETE等),并且对于GET和HEAD请求以外的任何其他内容,客户端应在发出请求之前提示用户。这是客户出错的部分,大多数客户都将后续请求的方法更改为GET,而与原始方法无关。
  3. 303重定向与302重定向相同,只是现在将后续请求显式更改为GET请求,并且无需确认。
  4. 307重定向与302重定向相同,区别在于后续请求现在与原始请求明确相同,并且对于GET和HEAD以外的请求方法,必须从用户处获取确认。

较旧的客户端可能无法理解303重定向。发出HTTP / 1.1请求的所有内容都应理解303响应。

可以将300和305响应视为重定向,这意味着有六种不同类型。


0

所使用的重定向类型(301,302,303 ...)对搜索引擎如何对内容建立索引和排名有很大影响。一些蜘蛛甚至可能拒绝索引临时重定向的内容。可以在各种SEO文献中找到详细信息...

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.