【问题标题】:Why does status code 201 not work for a redirect?为什么状态码 201 不适用于重定向?
【发布时间】:2020-04-21 17:35:04
【问题描述】:

我编写了一个 php 应用程序并想做一个重定向。当我删除状态码时,我花了很长时间搜索,发现它有效。我的代码是:

http_response_code(201);  
header('Location: http://address/that/works/');

根据文档 201 应该可以工作。

https://www.php.net/manual/de/function.header.php
第二种特殊情况是“Location:”标头。它不仅将此标头发送回浏览器,而且还会向浏览器返回一个 REDIRECT (302) 状态代码,除非 201 或 3xx 状态代码已经设置。

而且,至少德国维基百科说:

https://de.wikipedia.org/wiki/HTTP-Statuscode
Die Anfrage wurde erfolgreich Bearbeitet。 Die angeforderte Ressource wurde vor dem Senden der Antwort erstellt。 Das „Location“-Header-Feld enthält eventuell die Adresse der erstellten Ressource。

翻译:
请求已成功处理。请求的资源是在发送响应之前创建的。 “Location”头域可能包含所创建资源的地址

为什么 201 不起作用?

【问题讨论】:

  • 究竟什么是“工作”以及它是如何“不工作”的?设置或不设置 HTTP 状态时遇到什么问题/问题?
  • 当我将状态设置为 201 时,浏览器不会重定向。

标签: php


【解决方案1】:

在 HTTP 标准或您所包含的内容中没有任何内容表明用户代理应将客户端重定向到 Location 标头中给出的位置。只是它包含创建对象的位置。然而,3xx 系列明确表示内容已移动,并且客户应该寻找其他地方。

一般而言,您将在自己的代码中处理 201 Location 标头并根据内容执行您想要的任何操作 - 没有任何内在的内容表明浏览器应该检索(或显示)已创建 - 在许多情况下它不应该(即后台请求等)。

如果您希望客户端将用户重定向到新位置,请使用显式重定向 - 这就是它的用途。

【讨论】:

  • 感谢您的回答。看来,我误解了它,现在我使用 302 并且它可以工作。
猜你喜欢
  • 2014-07-02
  • 2022-10-17
  • 2018-07-05
  • 2018-10-10
  • 2021-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多