Почему код состояния 201 не работает для перенаправления? - PullRequest
0 голосов
/ 21 апреля 2020

Я пишу php приложение и хочу сделать редирект. У меня ушло много времени на поиск, чтобы выяснить, как это работает, когда я удаляю код состояния. Мой код:

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

В соответствии с документацией 201 должен работать.

https://www.php.net/manual/de/function.header.php
Второй особый случай - "Местоположение заголовок Он не только отправляет этот заголовок обратно в браузер, но также возвращает код состояния REDIRECT (302) в браузер, если 201 или код состояния 3xx не был уже установлен.

А также, по крайней мере, в немецкой Википедии написано:

https://de.wikipedia.org/wiki/HTTP-Statuscode
D ie Anfrage wurde erfolgreich bearbeitet. D ie angeforderte Ressource wurde vor dem Senden der Antwort erstellt. Das „Location“ -Header-Feld enthält eventuell d ie Адрес der erstellten Ресурс.

Перевод:
Запрос был успешно обработан. Запрашиваемый ресурс был создан до отправки ответа. Поле заголовка «Location» может содержать адрес созданного ресурса.

Почему 201 не работает?

1 Ответ

2 голосов
/ 21 апреля 2020

В стандарте HTTP или в том, что вы включили, нет ничего, что говорило бы о том, что пользовательский агент должен перенаправить клиента в местоположение, указанное в заголовке Location. Просто он содержит местоположение созданного объекта. Серия 3xx, однако, явно говорит о перемещении контента и о том, что клиент должен искать в другом месте.

В общем случае вы будете обрабатывать заголовок 201 Location в своем собственном коде и выполнять любые действия в зависимости от содержимого - нет ничего присущего тому, что браузер должен извлекать (или отображать) содержимое который был создан - во многих случаях он не должен (т.е. фоновый запрос и т. д. c.).

Используйте явное перенаправление, если вы хотите, чтобы клиент перенаправил пользователя в новое местоположение - это для чего это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...