Что такое корректный код состояния HTTP при перенаправлении к странице входа в систему?

Когда пользователь не зарегистрирован и пытается получить доступ к странице, которая требует входа в систему, каков корректный код состояния HTTP для перенаправления к странице входа в систему?

Я спрашиваю, потому что ни один из 3xx коды ответа, изложенные W3C, кажется, не соответствует требованиям:

10.3.1 300 разнообразного выбора

Требуемый ресурс соответствует любому из ряда представлений, каждый с его собственным определенным местоположением и агентом - управляемая информация о согласовании (разделите 12), обеспечивается так, чтобы пользователь (или агент пользователя) мог выбрать предпочтительное представление и перенаправить его запрос к тому местоположению.

Если это не был ГЛАВНЫЙ запрос, ответ ДОЛЖЕН включать объект, содержащий список характеристик ресурса и местоположения (местоположений), из которого агент пользователя или агент пользователя могут выбрать одно самое соответствующее. Формат объекта указан типом среды, данным в поле заголовка Типа контента. В зависимости от формата и возможностей

агент пользователя, выбор самого соответствующего выбора МОЖЕТ быть выполнен автоматически. Однако эта спецификация не определяет стандарта для такого автоматического выбора.

Если сервер имеет предпочтительный вариант представления, он ДОЛЖЕН включать определенный URI для того представительства в поле Location; агенты пользователя МОГУТ использовать значение поля Местоположения для автоматического перенаправления. Этот ответ является кэшируемым, если не обозначено иначе.

10.3.2 301 перемещенный постоянно

Требуемому ресурсу присвоили новый постоянный URI, и любые будущие ссылки на этот ресурс ДОЛЖНЫ использовать один из возвращенных URIs. Клиенты со ссылкой, редактируя возможности должны автоматически повторно связать ссылки на URI запроса к одному или нескольким новых ссылок, возвращенных сервером, если это возможно. Этот ответ является кэшируемым, если не обозначено иначе.

Новый постоянный URI ДОЛЖЕН быть дан полем Location в ответе. Если метод запроса не был ГОЛОВОЙ, объект ответа ДОЛЖЕН содержать короткое примечание к гипертексту с гиперссылкой к новому URI.

Если 301 код состояния получен в ответ на запрос кроме, ДОБИРАЮТСЯ или НАПРАВЛЯЮТСЯ, агент пользователя не ДОЛЖЕН автоматически перенаправлять запрос, если он не может быть подтвержден пользователем, так как это могло бы изменить условия, при которых был выпущен запрос.

  Note: When automatically redirecting a POST request after
  receiving a 301 status code, some existing HTTP/1.0 user agents
  will erroneously change it into a GET request.

10.3.3 302 Найденных

Требуемый ресурс находится временно под другим URI. Так как перенаправление могло бы быть изменено при случае, клиент ДОЛЖЕН продолжить использовать URI запроса для будущих запросов. Этот ответ является только кэшируемым, если обозначено Управлением Кэша или Истекает поле заголовка.

Временный URI ДОЛЖЕН быть дан полем Location в ответе. Если метод запроса не был ГОЛОВОЙ, объект ответа ДОЛЖЕН содержать короткое примечание к гипертексту с гиперссылкой к новому URI.

Если 302 кода состояния получены в ответ на запрос кроме, ДОБИРАЮТСЯ или НАПРАВЛЯЮТСЯ, агент пользователя не ДОЛЖЕН автоматически перенаправлять запрос, если он не может быть подтвержден пользователем, так как это могло бы изменить условия, при которых был выпущен запрос.

  Note: RFC 1945 and RFC 2068 specify that the client is not allowed
  to change the method on the redirected request.  However, most
  existing user agent implementations treat 302 as if it

были 303 ответа, выполняя Получение на значении поля Местоположения независимо от исходного метода запроса. Коды состояния 303 и 307 были добавлены для серверов, которые хотят сделать однозначно ясным, какой вид реакции ожидается клиента.

10.3.4 303 посмотрите другой

Ответ на запрос может быть найден под другим URI и ДОЛЖЕН быть получен с помощью ПОЛУЧИТЬ метода на том ресурсе. Этот метод существует, прежде всего, чтобы позволить выводу активированного POST сценария перенаправлять агент пользователя к выбранному ресурсу. Новый URI не является ссылкой замены для первоначально требуемого ресурса. 303 ответа не ДОЛЖНЫ кэшироваться, но ответ на второй (перенаправленный) запрос мог бы быть кэшируемым.

Другой URI ДОЛЖЕН быть дан полем Location в ответе. Если метод запроса не был ГОЛОВОЙ, объект ответа ДОЛЖЕН содержать короткое примечание к гипертексту с гиперссылкой к новому URI.

  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.

10.3.5 304 не измененный

Если клиент выполнил, условное выражение ПОЛУЧАЮТ запрос, и доступ предоставляется, но документ не был изменен, сервер ДОЛЖЕН ответить этим кодом состояния. 304 ответа не ДОЛЖНЫ содержать тело сообщения и таким образом всегда завершаются первой пустой строкой после полей заголовка.

Ответ ДОЛЖЕН включать следующие поля заголовка:

  - Date, unless its omission is required by section 14.18.1 If a

асинхронный сервер источника соблюдает эти правила, и прокси и клиенты добавляют свою собственную Дату к любому ответу, полученному без одного (как уже указано [RFC 2068], раздел 14.19), кэши будут работать правильно.

  - ETag and/or Content-Location, if the header would have been sent
    in a 200 response to the same request
  - Expires, Cache-Control, and/or Vary, if the field-value might
    differ from that sent in any previous response for the same
    variant If the conditional GET used a strong cache validator (see

разделите 13.3.3), ответ не ДОЛЖЕН включать другие заголовки объекта. Иначе (т.е. условное выражение Привыкают слабый блок проверки допустимости), ответ не ДОЛЖЕН включать другие заголовки объекта; это предотвращает несоответствия между кэшируемыми телами объекта и обновленными заголовками.

Если 304 ответа указывают на объект, не в настоящее время кэшируемый, то кэш ДОЛЖЕН игнорировать ответ и повторить запрос без условного выражения.

Если кэш использует полученные 304 ответа для обновления записи кэша, кэш ДОЛЖЕН обновить запись для отражения любых новых значений полей, данных в ответе.

10.3.6 305 прокси использования

К требуемому ресурсу НУЖНО получить доступ через прокси, данный полем Location. Поле Location дает URI прокси. Получатель, как ожидают, повторит этот единственный запрос через прокси. 305 ответов ДОЛЖНЫ только быть сгенерированы серверами источника.

  Note: RFC 2068 was not clear that 305 was intended to redirect a
  single request, and to be generated by origin servers only.  Not
  observing these limitations has significant security consequences.

10.3.7 306 (Неиспользованный)

306 кодов состояния использовались в предыдущей версии спецификации, больше не используется, и код резервируется.

10.3.8 307 временных перенаправлений

Требуемый ресурс находится временно под другим URI. Так как перенаправление МОЖЕТ быть изменено при случае, клиент ДОЛЖЕН продолжить использовать URI запроса для будущих запросов. Этот ответ является только кэшируемым, если обозначено Управлением Кэша или Истекает поле заголовка.

Временный URI ДОЛЖЕН быть дан полем Location в ответе. Если метод запроса не был ГОЛОВОЙ, объект ответа ДОЛЖЕН содержать короткое примечание к гипертексту с гиперссылкой к новому URI, начиная со многих pre-HTTP/1.1, агенты пользователя не понимают 307 состояний. Поэтому примечание ДОЛЖНО содержать информацию, необходимую, чтобы пользователь повторил исходный запрос на новом URI.

Если 307 кодов состояния получены в ответ на запрос кроме, ДОБИРАЮТСЯ или НАПРАВЛЯЮТСЯ, агент пользователя не ДОЛЖЕН автоматически перенаправлять запрос, если он не может быть подтвержден пользователем, так как это могло бы изменить условия, при которых был выпущен запрос.

Я использую 302 на данный момент, пока я не нахожу корректный ответ.

Обновление и заключение:

HTTP 302 лучше начиная со своего известного, чтобы иметь лучшую совместимость с клиентами/браузерами.

123
задан Flimzy 16 August 2015 в 16:43
поделиться

2 ответа

Я бы сказал 303 см. Другие 302 Найдено:

Запрошенный ресурс временно находится под другим URI. Поскольку перенаправление может иногда изменяться , клиент ДОЛЖЕН продолжать использовать Request-URI для будущих запросов. Этот ответ кэшируется только в том случае, если он указан полем заголовка Cache-Control или Expires.

, на мой взгляд, больше всего подходит для страницы входа. Сначала я рассматривал 303 см. Другие , которые также подойдут. Поразмыслив, я бы сказал, что 302 Found более подходит, потому что запрошенный ресурс был найден, просто нужно пройти еще одну страницу, прежде чем к ней можно будет получить доступ. По умолчанию ответ не кэшируется, что тоже нормально.

61
ответ дан 24 November 2019 в 01:18
поделиться

Я думаю, что подходящим решением является заголовок HTTP 401 (Not Authorized).

http://en.wikipedia.org/wiki/HTTP_codes#4xx_Client_Error

Цель этого заголовка именно такая. Но вместо перенаправления на страницу входа правильный процесс будет выглядеть примерно так:

  • Пользователь не вошел в систему и пытается получить доступ к странице с ограниченным входом.
  • система определяет, что пользователь не вошел в систему.
  • система возвращает заголовок HTTP 401 И отображает форму входа в систему в том же ответе (не при перенаправлении).

Это хорошая практика, например, предоставление полезной страницы 404 со ссылками на карту сайта и формой поиска.

Увидимся.

12
ответ дан 24 November 2019 в 01:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: