С какими кодами состояния HTTP должны беспокоиться программисты? - PullRequest
11 голосов
/ 05 января 2010

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

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

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

Ответы [ 6 ]

23 голосов
/ 05 января 2010

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • 503 (служба недоступна): Я не могу сейчас отвечать на запросы.

4 голосов
/ 05 января 2010

Точнее, это просто коды состояния 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.Например, если во время маршрутизации всех запросов с использованием .htaccess или ваших настроек Apache у вас есть один центральный исполняющий скрипт index.php, 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 не часто отправляет 401 самостоятельно.Вы можете отправить статус вручную, чтобы указать, что для доступа к странице необходимы дополнительные права.
  • 400 Bad Request отправляется Apache, если он получает запрос, который не может понять.Обычно вам не нужно беспокоиться об отправке вручную.
  • 403 Forbidden используется некоторыми людьми, когда пользователи пытаются получить доступ к области, к которой они не смогут получить доступ,даже при правильной аутентификации, возможно, из-за географических ограничений, IP-адресов или запретов.Я не использую это сам, и я просто использую 401 и 404 для заполнения.
  • 5xx.Серия 500 - это коды, которые вы действительно не видите как разработчик.Это означает, что ваш код или сервер сделали что-то плохое.Если у вас есть сервер или система балансировки нагрузки достаточного уровня, и в вашем коде нет ошибок, вы никогда не увидите серию 500.
1 голос
/ 05 января 2010

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

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

1 голос
/ 05 января 2010

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

0 голосов
/ 05 января 2010

Больше всего я использовал:

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