10 кодов состояния HTTP, которые звучат как проблемы в отношениях
404 Not Found
и 500 Server Error
, вероятно, самые известные коды состояния HTTP, но существует множество других.
По некоторым причинам, многие из менее известных кодов состояния HTTP звучат как дескрипторы проблем отношений. В этом посте мы рассмотрим их.
Если вы уже знакомы с тем, как работают циклы HTTP-ответов, вы можете пропустить HTTP-запросы 101 и сразу перейти к материалу в следующем разделе.
HTTP-запросы 101
HTTP-запросы затрагивают как минимум два компьютера. Компьютер, запрашивающий данные, называется клиентом, а компьютер, отправляющий данные обратно, называется сервером. Этот танец называется циклом запрос-ответ.
Когда сервер возвращает ответ, он также отправляет обратно код состояния для предоставления дополнительной информации. Коды состояния сгруппированы в сегменты на основе их начальной цифры.
- 1xx указывает на обновление статуса по запросу, который все еще выполняется.
- 2xx - это коды ответов «it’s all good», указывающих, что запрос был успешно выполнен.
- 3xx ответы являются перенаправлениями. Таким образом, клиент получает ресурс, отличный от того, который он первоначально запрашивал. Ресурс, кстати, это содержание, которое живет в определенном URL.
- Ответы 4xx - это ошибки, которые являются ошибкой клиента.
- Ответы 5xx - это ошибки сервера.
Теперь давайте перейдем к отношениям между кодами состояния в числовом порядке.
1. 103 Early Hints
В какой-то момент мы все проигнорировали ранние доказательства того, что свидание с кем-то было ужасной идеей. Особенно если ты знаешь, TSwift.
Те старые времена, когда JavaScript в основном использовался для анимации или, возможно, размещения формы, давно позади. Сегодня мы создаем полноценные приложения, которые работают в браузерах. Разработчикам не нравится изобретать велосипеды, и стандартная библиотека JavaScript не имеет большого количества утилит, поэтому мы склонны полагаться на вспомогательные библиотеки. К сожалению, использование множества громоздких зависимостей может замедлить работу сайта, особенно во время начальной загрузки страницы. Хотя есть обходные пути, такие как tree shaking.
Ранние подсказки - это экспериментальный код состояния, который сокращает время отклика, позволяя клиентам начать загрузку таких ресурсов, как таблицы стилей, пока сервер еще обрабатывает данные.
2. 226 IM Used
Не позволяйте себе быть использованным! Самоуважение является основополагающим аспектом здоровых отношений.
Некоторые серверы поддерживают новую функцию под названием Delta Encoding, которая позволяет клиентам запрашивать только те части страницы, которые изменились. Процесс согласования этих частичных запросов между клиентом и сервером называется манипуляцией, экземпляром или IM.
Клиент и сервер обмениваются информацией об управлении экземплярами через заголовки HTTP. Заголовки - это способ отправки дополнительной информации между клиентом и сервером в течение цикла запрос-ответ. Заголовки отформатированы как пары ключ-значение.
Если клиент хочет сделать частичный запрос, он укажет, какой формат IM он хочет через заголовок A-IM
. Если сервер поддерживает Delta Encoding, он отправит частичный ответ с кодом состояния 226.
3. 303 See Other
See other, безусловно, может вызвать проблемы отношения.
Поскольку See Other
это 3xx, мы знаем, что это какой-то код состояния перенаправления. В частности, See Other используются после того, как вы отправите PUT или POST запрос и требуется перенаправить его на страницу отличную от недавно созданного или обновленного ресурса. Например, если запрос POST может занять некоторое время, вы можете перенаправить пользователей на индикатор загрузки.
4. 403 Forbidden
403 Forbidden
: код ошибки «you shall not pass». Чем Forbidden отличается от 401 Unauthorized
? Например, неаутентифицированный пользователь пытается получить доступ к странице, требующей входа в систему. 403 Forbidden
для более общих ситуаций, таких как:
- Ваш IP заблокирован из-за ограничения скорости
- Вы пытаетесь загрузить файл в несуществующую папку
- Требуется шифрование, но вы его не используете
5. 406 Not Acceptable
Согласование контента звучит как модное маркетинговое словосочетание, но на самом деле это способ для серверов определить, какую версию ресурса отправить обратно клиенту. Это общение осуществляется, как вы уже догадались, заголовками.
Например, у вас есть страница на Yoruba. Клиент может отправить заголовок Accept-Language
со своим ответом, чтобы сказать, что он предпочел бы, чтобы его обслужили в Yoruba:
Accept-Language: yo
В дополнение к языку, другие заголовки, используемые для согласования контента:
- Accept-Charset
- Accept-Encoding
- User-Agent (хотя это не лучшая практика)
Иногда сервер не предлагает версию ресурса, которая удовлетворяет ограничениям клиента. В этом случае сервер вернет не приемлемый код ответа.
6. 409 Conflict
Как душа, не склонная к конфликтам, я стараюсь вообще избегать их. К сожалению, компьютеры не имеют такой возможности. Когда клиенты отправляют запрос, который не может быть выполнен, возникает конфликт.
Если вы программист, возможно, вы испытали радость конфликтов слияния, когда два человека пытались обновить один и тот же фрагмент кода несовместимым способом. Аналогично, конфликты могут возникать во время HTTP-запросов, если два клиента отправляют конфликтующие запросы PUT для обновления одного и того же ресурса.
Разрешение следует за конфликтом, или, по крайней мере, мы надеемся на него. На практике, серверы должны посылать клиентам информацию о том, что делать по-другому в следующий раз, чтобы избежать или разрешить конфликт.
7. 410 - Gone
Ушедший возвращается, когда ресурс больше не существует, навсегда. Здесь вернемся к очевидным параллелям отношений. Если вы предполагаете, что в какой-то момент можете встретиться со своим бывшим, используйте вместо этого ошибку 404 Not Found.
8. 417 - Expectation Failed
Цена входного билета за любовь иногда снижает ваши ожидания.
Заголовок expect отправляется от клиента на сервер, когда у клиента есть запрос, который он не уверен, что сервер может выполнить. Например, представьте, что я клиент, который хочет загрузить учебное видео по макияжу единорога на три терабайта. Я действительно люблю блеск с высоким разрешением, не судите меня. ✨ Я мог бы сначала послать что-нибудь вроде этого:
PUT /unicorn/makeup HTTP/1.1
Host: origin.horse.party
Content-Type: video/h264
Content-Length: 3,298,534,883,328
Expect: 100-continue
Когда сервер получает мое сообщение, он проверяет себя, чтобы решить. (" действительно ли я хочу иметь дело с вашим запросом сегодня?”) Если да, то он отсылает обратно
. Если нет, он отправляет 100 Continue
417 Expectation Failed
. Я очень рад, что в эти неопределенные времена серверы также практикуют уход за собой. Говорить "нет" просьбам очень важно!
9. 425 Too Early
Отношения могут расцвести, только если время выбрано правильно для всех вовлеченных сторон. HTTP-запросы также могут быть разборчивы во времени.
Существует два типа HTTP-запросов: они могут быть как зашифрованными, так и незашифрованными. Незашифрованные запросы отправляются в виде простого текста, что означает, что злоумышленник может точно знать, какие данные запрашиваются и возвращаются.
Зашифрованные запросы отправляются надежно с помощью безопасности транспортного уровня (TLS). Только клиент и сервер могут декодировать запросы и ответы. Злоумышленник, перехватывающий зашифрованный трафик, увидит только кажущиеся случайными строки символов.
Когда клиент инициирует зашифрованный запрос, клиент и сервер проходят (иногда медленный) танец, известный как рукопожатие TLS. Серверы могут дополнительно поддерживать ранние данные или отправлять данные до завершения TLS-рукопожатия. Тем не менее, не всегда безопасно отправлять ранние данные - это вызов сервера. Если нет, он отправит код ответа 425 Too Early
, чтобы клиент мог повторить попытку позже.
10. 451 Unavailable for legal reasons
Я искренне надеюсь, что вы не испытываете проблем в отношениях, которые требуют адвокатов.
Этот код ошибки является ссылкой на "451 градус по Фаренгейту", научно-фантастический роман о цензуре. Код ошибки 451 вступает в действие, когда запрос не может быть выполнен из-за правительственного мандата.
Этот ответ может не приходить напрямую с исходного сервера. Часто юридическая фильтрация происходит на уровне интернет-провайдера.
В идеале ответ должен содержать причину, по которой запрос не может быть выполнен. Что-то вроде следующего:
HTTP/1.1 451 Unavailable For Legal Reasons
Link: <https://volksverhetzung.de>; rel="blocked-by"
Content-Type text/html
<html>
<head>
<title>Unavailable For Legal Reasons</title>
</head>
<body>
<h1>Unavailable For Legal Reasons</h1>
<p>This request may not be serviced in Germany due to Strafgesetzbuch section 86a, which disallows "use of symbols of unconstitutional organizations".</p>
</body>
</html>
Завершение
Какой из этих кодов состояния лучше всего отражает ваши последние неудачные отношения?