Что означает HTTP-код состояния 401?

«Что означает HTTP-код состояния 401?» — вопрос из категории Сети, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Техническая суть:

  • Сервер требует аутентификации, но клиент либо не предоставил данные, либо предоставил неверные/истёкшие.
  • Ответ должен включать заголовок WWW-Authenticate, содержащий информацию о том, какую схему аутентификации использовать.

Пример на Java с использованием HttpURLConnection:

import java.net.HttpURLConnection;
import java.net.URL;

public class Example {
    public static void main(String[] args) throws Exception {
        URL url = new URL("https://api.example.com/protected");
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setRequestMethod("GET");
        // Передача недействительного токена
        connection.setRequestProperty("Authorization", "Bearer invalid_token");

        int responseCode = connection.getResponseCode();
        if (responseCode == HttpURLConnection.HTTP_UNAUTHORIZED) { // 401
            System.out.println("Ошибка 401: Неавторизованный доступ. Требуются действительные учётные данные.");
            // Заголовок WWW-Authenticate подскажет схему (например, Bearer, Basic)
            String authHeader = connection.getHeaderField("WWW-Authenticate");
            System.out.println("Сервер ожидает: " + authHeader);
        }
        connection.disconnect();
    }
}

Как исправить: Клиент должен отправить корректные учётные данные в соответствии со схемой, указанной сервером в WWW-Authenticate (например, валидный токен OAuth 2.0 или правильные логин/пароль для Basic Auth).