Статус HTTP для функционального перенаправления

Прямо сейчас у нас есть веб-страницы, которые показывают элементы пользовательского интерфейса, и веб-страницы, которые просто обрабатывают отправку форм, а затем перенаправляют обратно на страницы пользовательского интерфейса. Они делают это с помощью функции PHP header ():

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

Это вызывает отправку ответа 302 Found; согласно спецификации HTTP 1.1, 302 предназначен для случаев, когда «Запрошенный ресурс временно находится под другим URI». [Спецификация HTTP 1.1]

Функционально это нормально, но не похоже, что это правильный код состояния для того, что мы делаем. Похоже, что 303 («См. Другое») является здесь подходящим статусом, поэтому мне интересно, есть ли причина не использовать его. Нам нужно было бы более четко использовать header (), поскольку нам нужно было бы указать эту строку состояния, а не просто поле Location :. Мысли?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
4
0
837
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Я никогда не использовал его сам ... как говорится в вашей ссылке:

Note: Many pre-HTTP/1.1 user agents do not understand the 303 status. When interoperability with such clients is a concern, the 302 status code may be used instead, since most user agents react to a 302 response as described here for 303.

Это кажется мне достаточно хорошей причиной, чтобы придерживаться 302.

FYI заголовок () принимает дополнительные параметры, в которых вы можете установить код состояния:

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

Чтобы расширить ответ RoBorg, многие браузеры понимают лишь небольшую часть из многих, многих кодов ответа HTTP.

Примечание: если вас вообще беспокоит размещение в поисковых системах, 302-е могут (предположительно) вызвать проблемы.

Ответ принят как подходящий

Вы можете использовать и то, и другое, но правильный код состояния для использования для redirect-after-post - 303.

У этой путаницы есть историческое объяснение. Первоначально 302 указывало, что браузер не должен изменять метод перенаправленного запроса. Это делает его непригодным для перенаправления после публикации, когда вы хотите, чтобы браузер отправлял запрос GET. Однако все браузеры, похоже, неверно интерпретируют спецификации и всегда выдают запрос GET. Чтобы прояснить двусмысленность, HTTP / 1.1 определил два новых кода: 303 и 307. 303 по существу определяет фактическую интерпретацию 302, а 307 определяет исходную спецификацию 302. Таким образом, на практике 302 и 303 взаимозаменяемы, а в теория 302 и 307 ар.

Если вы В самом деле заботитесь о совместимости, 302 - более безопасная ставка, чем 303, поскольку агенты HTTP / 1.0 могут не понимать 303, но все современные браузеры поддерживают HTTP / 1.1, так что это не проблема. Я бы рекомендовал использовать 303, так как это наиболее правильный вариант.

На примечании; В поле Location должен быть полный URL. На практике это не имеет значения - браузеры снисходительны, - но если вам важны спецификации, то это правильно.

Как вы думаете, что я бы использовал для переадресации языкового согласования? Вопрос: stackoverflow.com/questions/8325784/…

jrosell 30.11.2011 17:39

Другие вопросы по теме