Мы находим много загадочных и неясных элементов, когда отодвигаем занавес на веб-страницах. Одним из таких элементов являются коды состояния HTTP. Мы предпочитаем не видеть эти коды, которые означают, что что-то пошло не так, но эти коды не просто указывают на ошибки, они также обозначают множество успешных ситуаций.

Почему важны коды состояния HTTP?

Коды состояния HTTP обозначают состояние ответов веб-сервера. Эти трехзначные числа, сообщающие нам о статусе нашего запроса, обычно делятся на пять различных категорий:

  • 1xx (Информационное): Запрос получен, обработка продолжается.
  • 2xx (успешно): запрос успешно получен, понят и принят.
  • 3xx (перенаправление): необходимы дополнительные действия для выполнения запроса.
  • 4xx (Ошибка клиента): Ошибка в запросе или запрос не может быть выполнен.
  • 5xx (Ошибка сервера): серверу не удалось выполнить действительный запрос.

Значения магических кодов

Вот наиболее часто встречающиеся коды и их значения:

  • 200 OK: Запрос успешно обработан, и вы получили ожидаемый ответ.
  • 201 Created: Запрос был выполнен успешно, и был создан новый ресурс.
  • 204 No Content: Запрос выполнен успешно, но содержимого для возврата нет.
  • 301 Moved Permanently: запрошенный URL-адрес был навсегда перемещен на новый URL-адрес.
  • 302 Found (Временно перемещено): запрошенный URL-адрес временно перемещен на другой URL-адрес.
  • 304 Not Modified: Данные в кеше клиента актуальны и не нуждаются в повторной загрузке.
  • 400 Bad Request: серверу не удалось понять синтаксис запроса.
  • 401 Unauthorized: Запрос требует авторизации.
  • 403 Forbidden: Сервер отклоняет запрос, несмотря на авторизацию.
  • 404 Not Found: Запрошенный ресурс не найден.
  • 429 Too Many Requests: Клиент сделал слишком много запросов за указанный период времени.
  • 500 Internal Server Error: На сервере произошла ошибка, и он не может выполнить запрос.

Пример JavaScript

Как фронтенд-разработчики, мы часто взаимодействуем с API с помощью таких инструментов, как axios.

import axios from 'axios';

const url = '<https://example.com/api/users>';
// Error handling function
function handleError(status) {
  switch(status) {
    case 400:
      console.error('Bad Request: The server could not understand the request due to invalid syntax.');
      break;
    case 401:
      console.error('Unauthorized: The client must authenticate itself to get the requested response.');
      break;
    case 403:
      console.error('Forbidden: The client does not have access rights to the content.');
      break;
    case 404:
      console.error('Not Found: The server cannot find the requested resource.');
      break;
    case 500:
      console.error('Internal Server Error: The server has encountered a situation it doesn\\'t know how to handle.');
      break;
    default:
      console.error(`Unknown error occurred. Status: ${status}`);
  }
}
axios.get(url).then(response => {
  // We check the status code.
  const status = response.status;
  if (status >= 200 && status < 300) {
    // The request was successful.
    const data = response.data;
    // Do something with the data.
  } else {
    // The request failed, handle the error.
    handleError(status);
  }
}).catch(error => {
  // Handle errors without HTTP status code.
  console.log(error);
});

В этом примере мы создали функцию обработки ошибок с именем handleError. Эта функция принимает код состояния HTTP в качестве параметра и выводит индивидуальное сообщение об ошибке в зависимости от ситуации. Таким образом, мы централизованно обрабатываем ситуации с ошибками, делая наш код чище и понятнее.

Блок catch Axios фиксирует ошибки без кода состояния HTTP. Например, когда возникает ошибка сети или запрос не может быть выполнен, Axios выдает запрос как ошибку, и эти ошибки фиксируются в блоке catch. Мы обрабатываем эти ситуации, выполняя общую операцию по отлову ошибок в блоке catch. Такой подход позволяет отловить все типы ошибок и принять их соответствующим образом.

Заключение: коды состояния HTTP и взаимодействие с пользователем

Знание кодов состояния HTTP облегчает навигацию в темноте. Эти коды предоставляют нашим пользователям информацию о том, что пошло не так, и помогают им понять, что они могут сделать. Каждый разработчик внешнего интерфейса должен понимать эти коды состояния и правильно их использовать. Помните, что каждый код состояния указывает на то, что возникла конкретная ситуация, а не просто что-то пошло не так. Чтобы не остаться в неведении, мы должны ознакомиться с этими кодами состояния.