Прямо сейчас у нас есть веб-страницы, которые показывают элементы пользовательского интерфейса, и веб-страницы, которые просто обрабатывают отправку форм, а затем перенаправляют обратно на страницы пользовательского интерфейса. Они делают это с помощью функции PHP header ():
header("Location: /other_page.php");
Это вызывает отправку ответа 302 Found; согласно спецификации HTTP 1.1, 302 предназначен для случаев, когда «Запрошенный ресурс временно находится под другим URI». [Спецификация HTTP 1.1]
Функционально это нормально, но не похоже, что это правильный код состояния для того, что мы делаем. Похоже, что 303 («См. Другое») является здесь подходящим статусом, поэтому мне интересно, есть ли причина не использовать его. Нам нужно было бы более четко использовать header (), поскольку нам нужно было бы указать эту строку состояния, а не просто поле Location :. Мысли?






Я никогда не использовал его сам ... как говорится в вашей ссылке:
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/…