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

函数重定向的HTTP状态

  •  4
  • dirtside  · 技术社区  · 16 年前

    现在我们有了显示UI元素的网页,以及只处理表单提交,然后重定向回UI页面的网页。他们使用PHP的header()函数来实现这一点:

    header("Location: /other_page.php");
    

    这导致发送302找到的响应;根据HTTP 1.1规范,302适用于“请求的资源临时驻留在不同URI下”的情况 [HTTP 1.1 spec]

    3 回复  |  直到 15 年前
        1
  •  8
  •   troelskn    16 年前

    您可以使用其中任何一个,但post后重定向使用的正确状态代码为303。

    这种混乱是有历史原因的。最初,302指定浏览器不得更改重定向请求的方法。这使得它不适合在post后重定向,您希望浏览器发出GET请求。然而,所有浏览器似乎都误解了规范,总是发出GET请求。为了消除歧义,HTTP/1.1指定了两个新代码:303和307。303基本上指定了302的事实解释,而307指定了302的原始规范。所以在实践中302和303是可互换的,理论上302和307是可互换的。

    如果你 真正地

    在旁注上;这个 Location 字段应该是完整的URL。在实践中,这并不重要——浏览器是宽容的——但是如果你关心规范,那就是正确的做法。

        2
  •  4
  •   Greg    16 年前

    我自己从来没用过。。。正如它在你的链接中所说:

    注意:许多HTTP/1.1之前的用户代理 302由于大多数用户代理都会做出反应,因此可以使用状态代码

    这似乎是我坚持使用302的充分理由。

    供参考 header() 获取可以设置状态代码的额外参数:

    header('Location: /foo.php', true, 303);

        3
  •  1
  •   Zack Peterson    15 年前

    为了扩展RoBorg的答案,许多浏览器只理解一小部分HTTP响应代码。