Какие коды состояния HTTP должны быть связаны с программистами?

Таким образом, если вы посмотрите на список кодов состояния HTTP , возможно, есть их число, которое было бы полезно при программировании. Сервер может обрабатывать некоторые вещи, такие как протоколы, но многие из этих кодов могут быть полезны при передаче браузерам фактического состояния страницы.

Итак, мой вопрос заключается в том, с какими из кодов состояния мы должны заниматься? Что мы должны проверять на отправку, и какие из них, скорее всего, никогда не будут использоваться в обычном программировании приложений.

Если вам интересно, это относится к сфере программирования PHP, но, вероятно, это применимо и к другим языкам.

Многие из них по своей сути полезны при использовании API REST-стиля. Например:

  • 200 (OK): Вы запросили ресурс. Вот!

  • 201 (Создано): Вы попросили меня создать новый ресурс. Я сделал! Здесь вы можете попросить меня в следующий раз.

  • 202 (Принято): Вы попросили меня что-то сделать, но это займет некоторое время, так что не ждите. Здесь вы можете проверить статус.

  • 300 (множественный выбор): вы что-то просили, но вы не были достаточно конкретными. Какой из них вы имели в виду?

  • 301 (Постоянно перемещается): Вы что-то просили, но теперь это где-то еще. Вот куда он пошел.

  • 302 (Найдено): Вы просили что-то, но сейчас это где-то еще. Вот.

  • 304 (Не изменено): Вы просили что-то перед этим, но с тех пор, как вы спрашивали меня, это не изменилось.

  • 400 (Bad Request): Что-то не так в том, что вы просили меня сделать. Исправьте то, что вы сказали, и попробуйте еще раз.

  • 401 (Неавторизованный): Мне нужно, чтобы вы идентифицировали себя, прежде чем я смогу закончить этот запрос. [Примечание. Это один из наиболее печально названных заголовков. Это действительно должно быть озаглавлено Unauthenticated ; 403 больше походит на Несанкционированное .]

  • 403 (Запрещено): Вы просили что-то, чего вам не разрешили.

  • 404 (Не найдено): вы запрашивали ресурс, но не соответствует вашему описанию.

  • 500 (Ошибка сервера): Что-то пошло не так, поэтому я не могу дать вам то, что вы просили прямо сейчас. Извини за это.

  • 501 (Не реализовано): Я не поддерживаю этот запрос прямо сейчас.

  • 503 (Service Unavailable): Я не могу отвечать на запросы прямо сейчас.

Чтобы быть более точным, это всего лишь коды состояния HTTP, а не заголовки HTTP. Заголовки передают много вещей и отправляются как клиентом, так и сервером, и выходят за рамки этого ответа.

Один из HTTP-заголовков, а именно первый, отправленный сервером клиенту, выглядит следующим образом:

HTTP/1.x 200 OK 

или:

 HTTP/1.x 404 Not Found 

Число, которое появляется после идентификатора протокола HTTP/1.x , называется кодом состояния с соответствующим сообщением о состоянии, отправленным после него. Вот коды статуса, которые я должен был использовать в свои дни программирования PHP:

  • 200 OK на сегодняшний день является наиболее распространенным. Это означает, что все работает нормально и что вы отвечаете контентом.
  • 404 Not Found автоматически отправляется сервером при определенных условиях, в частности, когда запрос приводит к выполнению сценария, который не может быть найден на сервере. Иногда, особенно если вы пишете фреймворки, которые обрабатывают URI особым образом, вам нужно вручную установить код состояния 404. Например, если у вас есть один центральный исполняемый скрипт index.php пока вы отправляете все запросы с использованием .htaccess или ваших настроек Apache, Apache почти никогда не вернет 404 самостоятельно, потому что, в конце концов, он нашел index.php . Но, очевидно, все же будут некоторые URI, которые вы хотите сообщить, не приводят ни к чему, для чего вы захотите отправить свой собственный заголовок статуса 404.
  • 301 Moved Permanently и 302 Found (чаще всего упоминается как «Перемещено временно»). Эти два инструктируют браузер искать заголовок Location и перенаправлять пользователя на указанный там URL. Большинство фреймворков PHP имеют свои собственные функции для перенаправления HTTP, которые также обрабатывают заголовки. Собственный header('Location: http://www.google.com'); перенаправления PHP header('Location: http://www.google.com'); автоматически изменяет статус HTTP на 302. Я никогда не понимал глубину разницы между 302 и 301, но я читал, что 301 намного лучше для поисковой оптимизации, поэтому я стараюсь всегда использовать 301. Возможно, кто-то еще может просветите, что такое точная разница. Одна вещь, о которой нужно быть осторожностью, – не помещать статус 301/302 и заголовок местоположения на странице, предназначенной для получения данных POST. У меня были проблемы с ним в прошлом.
  • 304 Not Modified обычно отправляется автоматически в зависимости от ваших настроек Apache. Большинство браузеров при нормальных условиях включают дату / время, на которое запрошенный элемент был кэширован на компьютере пользователя. Для этой цели используются ETags и другие заголовки. Если Apache считает, что соответствующий файл сервера не изменился с того времени, Apache часто отправляет 304 без содержимого, что просто говорит клиенту использовать кешированную версию.
  • 401 Unauthorized отправляется, когда пользователь пытается получить доступ к узлу с ограничениями на веб-сайте. Существуют некоторые старые функции HTML и серверные технологии, которые поддерживают собственные подсказки имени пользователя и пароля, которые отправили 401 кодов статуса, когда приглашения были отменены или не авторизованы. Большинство людей в наши дни пишут свои собственные реализации PHP для аутентификации пользователей и управления правами, поэтому Apache не часто отправляет 401s самостоятельно. Вы можете отправить статус вручную, указав, что для доступа к странице требуется больше прав.
  • 400 Bad Request отправляется Apache, если он получает запрос, который он не может понять. Обычно вам не нужно беспокоиться о его отправке вручную.
  • 403 Forbidden использовать некоторые люди, когда пользователи пытаются получить доступ к области, к которой они не смогут получить доступ, даже при правильной аутентификации, возможно, из-за ограничений географического, IP-адреса или запрета. Я не использую его сам, и я просто использую 401 и 404 для заполнения.
  • 5xx . Серия 500 – это коды, которые вы действительно не видите в качестве разработчика. Это означает, что ваш код или сервер сделали что-то плохое. Если у вас есть сервер или система балансировки нагрузки достаточного калибра, и у вас нет ошибок в коде, вы никогда не увидите 500-й серии.

Ну, это коды статуса, а не заголовки, но любой из них может быть полезен (хотя серия 5xx вряд ли будет).

Я говорю, что вы говорите об использовании заголовков для обслуживания файлов или предоставления веб-сервиса RESTful?

Тогда вы будете получать коды статуса, а не заголовки. Я обычно использовал:

 200 OK 301 Moved Permanently 302 Found (temporary redirect) 400 Bad Request 403 Forbidden 404 Not found 500 Internal Server Error 

Разумеется, для веб-сервисов RESTful вы можете изменить текст более описательным, а также предоставить описание в теле.

Тогда есть:

 418 I'm a teapot 

Быстро просматривая этот список (кодов состояния) , вот те, которые я часто использую (я занимаюсь разработкой PHP в качестве моей работы) :

  • 200 OK : почти всегда отправлено Apache
  • 301 Moved Permanently : обычно отправляется мной (или Apache при использовании правил перезаписи)
  • 302 Found : обычно отправлено мной (или Apache при использовании правил перезаписи)
  • 304 Not Modified : обычно отправляется Apache (или обратным прокси перед ним)
  • 401 Unauthorized : обычно отправляется Apache
  • 403 Forbidden : обычно отправлено Apache
  • 404 Not Found : отправлено мной и Apache и мной – в зависимости от ситуаций
  • 410 Gone : вообще послано мной
  • 500 Internal Server Error : отправлено как Apache, так и мной; это то, что я обычно использую, когда есть «техническая» ошибка – даже если это никогда не должно произойти ^^

И вот те, которые я мог бы использовать (особенно, если делать REST) :

  • 201 Created
  • 400 Bad Request
  • 402 Payment Required
  • 405 Method Not Allowed
  • 501 Not Implemented
  • 503 Service Unavailable

Те, что я использовал больше всего:

  • 301 – Перемещено на постоянной основе. Используйте это, если ресурс постоянно перемещается на новый URL-адрес.
  • 302 – Перемещено временно – используйте это для перенаправления, если у вас нет постоянной переадресации.
  • 404 Не Найдено. Ваш сервер должен быть настроен таким образом, чтобы служить для недопустимых URL-адресов. Вы должны следить за ними в своих журналах – слишком много 404s является признаком плохого толчка.
  • 500 – внутренняя ошибка сервера. Ваш сервер должен быть настроен на правильную отправку, если есть ошибки. Вы должны контролировать ошибки 5xx в ваших журналах.