Якщо користувач не входить у систему та намагається отримати доступ до сторінки, яка потребує входу, який правильний код статусу HTTP для переадресації на сторінку входу?
Я запитую, оскільки жоден із 3хX кодів відповідей, встановлених W3C, здається, не відповідає вимогам:
10.3.1 300 декількох варіантів
Запитаний ресурс відповідає будь-якому з набору представлень, кожне зі своїм конкретним місцеположенням, і надається керована агентом інформація про переговори (розділ 12), щоб користувач (або агент користувача) міг вибрати бажане представлення та перенаправити його запит до цього місця.
Якщо це не запит HEAD, відповідь ДОЛЖЕН би включати сутність, що містить перелік характеристик ресурсів та місцеположення, з яких користувач або користувальницький агент можуть вибрати найбільш відповідний. Формат сутності визначається типом носія, вказаним у полі заголовка Content-Type. Залежно від формату та можливостей
користувальницький агент, вибір найбільш відповідного вибору МОЖЕ проводитися автоматично. Однак ця специфікація не визначає жодного стандарту для такого автоматичного вибору.
Якщо сервер має кращий вибір представлення, він ДОЛЖЕН би включити конкретний URI для цього представлення в полі Location; користувацькі агенти МОЖЕ використовувати значення поля Location для автоматичного перенаправлення. Ця відповідь є кешованою, якщо не вказано інше.
10.3.2 301 Переміщено постійно
Запитаному ресурсу присвоєно новий постійний URI, і будь-які майбутні посилання на цей ресурс ДОЛЖНІ використовувати один з повернених URI. Клієнти, що мають можливості редагування посилань, повинні, коли це можливо, автоматично перенаправляти посилання на URI-запит на одну або декілька нових посилань, повернених сервером. Ця відповідь є кешованою, якщо не вказано інше.
Новий постійний URI повинен бути вказаний полем відповіді у відповіді. Якщо метод запиту не був HEAD, сутність відповіді ДОЛЖНА містити коротку примітку гіпертексту з гіперпосиланням на нові URI.
Якщо код статусу 301 отриманий у відповідь на запит, відмінний від GET або HEAD, агент користувача НЕ повинен автоматично перенаправляти запит, якщо він не може бути підтверджений користувачем, оскільки це може змінити умови, за яких запит був виданий.
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-запит для майбутніх запитів. Ця відповідь є кешованою лише тоді, коли вона вказана в полі заголовка Cache-Control або Expires.
Тимчасовий URI повинен бути вказаний полем Location у відповіді. Якщо метод запиту не був HEAD, сутність відповіді ДОЛЖНА містити коротку примітку гіпертексту з гіперпосиланням на нові URI.
Якщо код статусу 302 отриманий у відповідь на запит, відмінний від GET або HEAD, агент користувача НЕ повинен автоматично перенаправляти запит, якщо він не може бути підтверджений користувачем, оскільки це може змінити умови, за яких запит був виданий.
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, виконуючи GET для значення поля Location незалежно від оригінального методу запиту. Коди статусу 303 та 307 додані для серверів, які хочуть однозначно зрозуміти, яка реакція очікується від клієнта.
10.3.4 303 Див. Інше
Відповідь на запит можна знайти під іншим URI, і ДОЛЖЕН бути отриманий за допомогою методу GET на цьому ресурсі. Цей метод існує головним чином, щоб дозволити виводу сценарію, активованого POST, перенаправити агент користувача на обраний ресурс. Новий URI не є заміною посилання на початково запитуваний ресурс. Відповідь 303 НЕ МОЖЕ бути кешована, але відповідь на другий (перенаправлений) запит може бути кешованою.
У відповіді повинно бути задано різний URI. Якщо метод запиту не був HEAD, сутність відповіді ДОЛЖНА містити коротку примітку гіпертексту з гіперпосиланням на нові 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 Не змінено
Якщо клієнт виконав умовний GET-запит і доступ дозволений, але документ не змінено, сервер ДОЛЖЕН відповісти цим кодом статусу. Відповідь 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), відповідь НЕ повинен включати інші заголовки об'єктів. В іншому випадку (тобто умовний GET використовував слабкий валідатор), відповідь НЕ повинен включати інші заголовки об'єктів; це запобігає невідповідності між кешованими органами сутності та оновленими заголовками.
Якщо відповідь 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-запит для майбутніх запитів. Ця відповідь є кешованою лише тоді, коли вона вказана в полі заголовка Cache-Control або Expires.
Тимчасовий URI повинен бути вказаний полем Location у відповіді. Якщо метод запиту не був HEAD, суть відповіді ДОЛЖНА містити коротку примітку гіпертексту з гіперпосиланням на нові URI (s), оскільки багато користувальницьких агентів, що передують HTTP / 1.1, не розуміють стану 307. Тому примітка ДОЛЖНА містити інформацію, необхідну користувачеві для повторення початкового запиту на новому URI.
Якщо код статусу 307 отримано у відповідь на запит, відмінний від GET або HEAD, агент користувача НЕ повинен автоматично перенаправляти запит, якщо він не може бути підтверджений користувачем, оскільки це може змінити умови, за яких запит був виданий.
Я використовую 302 зараз, поки я не знайду на правильну відповідь.
Оновлення та висновок:
HTTP 302 кращий, оскільки, як відомо, найкраща сумісність з клієнтами / браузерами.