Кажется, что существует много путаницы в правильном коде состояния http для возврата, если пользователь пытается получить доступ к странице, требующей входа пользователя.
Итак, какой код статуса будет отправляться, когда я покажу страницу входа?
Я уверен, что нам нужно использовать код состояния в диапазоне 4xx
.
Я не говорю об аутентификации HTTP здесь, так что по крайней мере 1 код состояния, который мы не будем использовать (401 Unauthorized
).
Теперь, что мы должны использовать? Ответы (также здесь на SO) кажутся разными:
В соответствии с ответом здесь мы должны использовать 403 Forbidden
.
Но в описании кода состояния есть:
Авторизация не поможет, и запрос НЕ ДОЛЖЕН быть повторен.
Ну, это не похоже на правильное. Поскольку авторизация ДОЛЖНА помочь.
Итак, давайте рассмотрим другой ответ. Ответ здесь даже не использует диапазон 4xx
, а использует 302 Found
Описание кода состояния 302 Found
:
Запрошенный ресурс временно находится под другим URI. Так как перенаправление может быть иногда изменено, клиент ДОЛЖЕН продолжать использовать Request-URI для будущих запросов. Этот ответ доступен только для кэширования, если указано полем Cache-Control или Expires.
Я думаю, что это тоже не то, что я хочу. Поскольку он не является запрошенным ресурсом, который находится под другим URI. Но скорее совершенно другой ресурс (страница входа в систему и страница с проверкой подлинности).
Итак, я продвинулся и выбрал еще один answer с еще одним решением.
Этот ответ предполагает, что мы выбираем 400 Bad Request
.
Описание этого кода состояния:
Запрос не может быть понят сервером из-за неправильного синтаксиса. Клиент НЕ ДОЛЖЕН повторять запрос без изменений.
Я думаю, что сервер понял запрос просто отлично, но просто отказывается предоставить доступ до того, как пользователь будет аутентифицирован.
Другой answer также говорит, что ответ 403
правильный, однако он заканчивается на:
Если это общедоступный веб-сайт, на котором вы пытаетесь запретить доступ на основе cookie сеанса [что я делаю], 200 с соответствующим органом, чтобы указать, что требуется вход в систему, или временное перенаправление 302 на журнал часто бывает лучше.
Итак, 403
является правильным, но 200
или 302
является ЛУЧШИМ.
Эй! Это то, что я ищу: ЛУЧШЕЕ решение. Но не лучше ли быть тем же самым, что и правильный? И почему это было бы лучше?
Спасибо всем, кто сделал это так далеко в этом вопросе:)
Я знаю, что я не должен слишком беспокоиться об этом. И я думаю, что этот вопрос более гипотетический (не совсем, но использовал его из-за отсутствия лучшего слова).
Но этот вопрос преследует меня в течение некоторого времени.
И если бы я был менеджером (который только что поднял некоторые классные звуковые слова, как всегда), я бы сказал: но, но, но, но спокойствие важно.: -)
Итак: что такое the right way™
использования кода состояния в указанной ситуации (если есть)?
TL;DR
Каков правильный ответ кода статуса HTTP, когда пользователь пытается получить доступ к странице, требующей входа?