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

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

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

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

Ответ 1

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ответ 2

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

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

HTTP/1.x 200 OK

или

HTTP/1.x 404 Not Found

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

  • 200 OK на сегодняшний день является наиболее распространенным. Это означает, что все работает нормально и что вы отвечаете на контент.
  • 404 Not Found автоматически отправляется сервером при определенных условиях, в частности, когда запрос приводит к выполнению script, который не может можно найти на сервере. Иногда, особенно если вы пишете фреймворки, которые обрабатывают URI особым образом, вам нужно вручную установить код состояния 404. Например, если у вас есть один центральный запуск script index.php, пока вы отправляете все запросы с использованием .htaccess или ваших настроек Apache, Apache почти никогда не вернет 404 самостоятельно, потому что, в конце концов, он нашел index.php. Но, очевидно, все же будут некоторые URI, которые вы хотите сообщить, не приводят ни к чему, для чего вы захотите отправить свой собственный заголовок статуса 404.
  • 301 Moved Permanently и 302 Found (чаще упоминается как "Перемещено временно" ). Эти два инструктируют браузер искать заголовок Location и перенаправлять пользователя на указанный там URL. Большинство фреймворков PHP имеют свои собственные функции для перенаправления HTTP, которые также обрабатывают заголовки. Нативный 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-й серии.

Ответ 3

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

Ответ 4

Быстрый просмотр этого списка (кодов состояния), вот те, которые я часто использую (я делаю 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):

Ответ 5

Я говорю об использовании заголовков для обслуживания файлов или предоставления веб-службы 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

Ответ 6

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

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