HTTP или HyperText Transfer Protocol – это протокол передачи гипертекста. Является протоколом прикладного уровня, используемым для передачи данных.

Изначально информация передавалась под видом гипертекстовых документов в формате HTML. По мере развития технологий HTTP стал работать с произвольными данными.

Данный протокол работает на основании запросов. Они представлены командами, посылаемыми клиентом в клиент-серверной модели. При помощи соответствующих «функций» пользователь сможет совершать различные операции и действия над веб-сайтами и интернет-приложениями.

Рассматриваемый протокол описан при помощи спецификации RFC2616. Наиболее распространенные его версии – это HTTP/1.1 и HTTP/2.

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

Принцип работы запросов

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

  1. Сначала клиент (client) формирует запрос (request) и отправляет его на сервер.
  2. Сервер (server) получает «команду» и обрабатывает ее. В процессе обработки информации формируется тот или иной результат. Это – ответ сервера.
  3. Серверная часть перенаправляет на клиентскую «сторону» результат обработки запроса.
  4. Клиентская часть принимает ответ. Им выступает возвращенный результат «команды». Пример – переход на веб-страницу в браузере.
HTTP-запросы и статусы

Выше данный алгоритм представлен в виде наглядной картинки. Это простейшая схема коммуникации нескольких устройств по HTTP-протоколам. По умолчанию подключение осуществляется при помощи порта 80. Вместо него можно установить другой порт – все зависит непосредственно от конфигурационных параметров веб-сервера.

HTTP-сообщение: виды

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

  1. Запросы или HTTP Requests. Это сообщения, которые будут отправляться с клиентской стороны на сервер для осуществления определенных операций. Чаще всего – для непосредственного получения доступа к тому или иному веб-проекту/сайте/приложению. В качестве основы здесь выступает HTTP-заголовок.
  2. Ответы или HTTP Responses. Это сообщения, отправляемые серверами в качестве ответов на изначально посланные клиентами «команды».

У запросов по упомянутому ранее протоколу имеется определенная структура. У каждого администратора и разработчика должно быть общее понимание состава «команды». Эта информация поможет лучше и быстрее обработать запрос и возникшие при работе с ним ошибки.

Структура

Структура команд в клиент-серверной модели имеет следующий состав:

  1. Стартовая строка – применяется для того, чтобы описать версию используемого протокола. Здесь публикуются иные данные. Пример – запрашиваемый ресурс или код состояния ответа. Содержимое занимает всего одну строчку.
  2. Заголовок – headers. Это несколько строк текста в заданном формате. Они уточняют запрос, посылаемый на сервер, или описывают содержимое тела сообщения.
  3. Пустая строка. Указывает на то, что метаданные, используемые для имеющейся «команды» или ответа сервера были отправлены в «нужную» сторону.
  4. Опциональное тело сообщения. Оно включает в себя информацию, связанную с посланным на сервер сообщением для обработки. Может содержать документы, передаваемые в качестве ответов.

Далее предстоит изучить соответствующие составляющие более подробно, чтобы лучше понимать, когда клиент может получить тот или иной код ошибки в качестве результата на сформированное сообщение.

Стартовая строка

Она включает в себя несколько компонентов:

  1. Метод запроса. Представлено коротким словом на английском. Оно указывает на то, что именно сервер должен сделать. Метод Get сообщает серверу, что пользователь запрашивает определенную информацию. При помощи метода Post можно разместить данные на сервере.
  2. Цель запроса. Это URL-указатель веб-страницы или интернет-приложения. Включает в свой состав: протокол, доменное имя, путь к конкретному проекту на сервере. Дополнительно включает в себя номер порта и иные параметры HTTP-команды.
  3. Версия используемого протокола. Отвечает за определение структуры информации, идущей после стартовой строки.
HTTP-запросы и статусы

Выше – наглядный пример реализации стартовой строки. Она указывает на то, что в виде метода используется Get. Обращение осуществляется к сервису /index.html. Для обработки сервер будет использовать протокол версии HTTP/ 1.1

Методы

Методы необходимо знать, чтобы грамотно исправлять ошибки. Иногда сбои бывают вызваны неправильно составленной «командой».

Наиболее распространенными методами в рассматриваемом протоколе являются:

  1. Get. Используется для запросов ресурсов. Предусматривается передача дополнительных данных через строку «команды» в виде URL.
  2. Post. Активируется, когда сервер должен получить для размещения информацию, включая файлы.
  3. Head. Дает возможность получать только заголовки, которые могут быть возвращены, если бы server начал обрабатывать запрос типа GET.
  4. Put. Размещает/создает новые ресурсе на серверной стороне.
  5. Delete. Удаление существующих ресурсов в серверной части модели.
  6. Options. Позволяет получить информацию у серверной части, включая данные о допустимых для дальнейшей обработки методах.
  7. Patch. Используется для частичных изменений задействованного ресурса.

Другие команды тоже встречаются, но значительно реже.

URL-адреса

URL – это указатель или Uniform Resource Locator. Он представлен в виде строчки, которая дает возможность указать запрашиваемый ресурс и ряд некоторых параметров. Использование URL неразрывно связано с другими компонентами протокола, который включает в себя:

  1. Scheme. Это поле, которое используется для указания используемого протокола. Оно всегда сопровождается двоеточием и двумя //.
  2. Host – используется для уточнения местоположения веб-ресурса или приложения. Включает в себя IP-адрес. Может состоять из доменного имени.
  3. Port. С помощью соответствующего компонента пользователь способен указать порт подключения к серверу. Начинается с двоеточия, после которого задается необходимые значения. Если порт не указан, он выбирается автоматически.
  4. Path. Это блок, в котором указывается ресурс, к которому осуществляется непосредственное подключение. Если компонент отсутствует, сервер обычно возвращает указатель по умолчанию.
  5. Query String – начинается с «?», после которого записывается пара «параметр–значение». Между соответствующей записью ставится знак равенства. В данном поле могут передаваться несколько параметров. Для их разделения на письме используется символ «&».

Обязательными для доступа к ресурсу – это Host и Scheme. Остальные перечисленные параметры могут отсутствовать.

Версии HTTP

HTTP/1.1 – это один из наиболее стабильных протоколов подключения. Он имеет несколько проблем:

  • передача заголовков в несжатой форме, а тела сообщения – в «форматированном» представлении;
  • передача по интернету даже тех частей заголовков, которые совпадали;
  • отсутствие мультиплексирования.

Перечисленные проблемы удалось устранить вместе с HTTP/2. Теперь информация разбивается на фреймы, встраиваемые непосредственно в поток информации.

Заголовки

HTTP-заголовок – это «длинный текст», сформированный в формате «Имя-Заголовок-Значение» с двоеточием в виде разделяющего символа. Название заголовка запроса не учитывает регистр. Согласно действующим негласным правилам, принято каждое отдельное слово в такой записи указывать с заглавной буквы.

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

Заголовки делятся на несколько видов:

  1. Общего назначения. Они относятся ко всему сообщению.
  2. Заголовки запроса. С их помощью удается уточнить информацию о запросах, сообщая дополнительный контекст или используя ограничения, представленные логическими условиями.
  3. Заголовки представления. Они описывают формат данных сообщения, а также используемый тип кодировки. Добавляются к запросу не всегда – необходимы только тогда, когда с заголовком передается некоторое тело.
HTTP-запросы и статусы

Выше – примеры наиболее распространенных заголовков запроса.

Тело запроса

Заключительная часть посылаемой на сервер «команды». Может отсутствовать у некоторых запросов: het, options, delete, head. Некоторые такие «команды» умеют отправлять данные непосредственно на серверную сторону. Наиболее распространенным вариантом является post.

Ответы HTTP

HTTP-ответ – это сообщение, которое будет отправляться сервером клиенту на посланную для обработки «команду». Его структура окажется точно такой же, как и в случае с HTTP Request: стартовая строчка, заголовок и тело.

Тело ответа

Тело ответа – это заключительная его часть. Присутствует у большинства ответов, но не является обязательным компонентом. Некоторые коды ошибок и ответов не предусматривают тел, потому что все необходимые данные сообщаются в заголовке.

Заголовки ответа

Заголовки ответа применяются для уточнения ответа. Они никак не отражаются на содержимом тела. Поддерживаются в том же формате, что и остальные заголовки: «Имя–Значение» с разделителем-двоеточием.

HTTP-запросы и статусы

Выше можно увидеть несколько наиболее распространенных в ответах заголовков.

Строка статуса ответа

Строка статуса или status line – это компонент, который включает в себя:

  • версию протокола;
  • код протокола, указывающий на факт успешной обработки «команды» на сервере;
  • пояснение – небольшое текстовое описание к коду состояния, используемое для упрощения понимания и восприятия данных человеком.
HTTP-запросы и статусы

Вот – пример того, как выглядит строка состояния вышестоящего сервера. Далее предстоит более подробно изучить состояния и их коды, а также расшифровку ошибок. Эта информация пригодится как новичкам, так и более опытным специалистам. С ее помощью даже рядовой пользователь сможет выяснить, почему сервер не может обработать посланную «команду».

Типы кодов

Коды состояния применяются для того, чтобы указать клиенту статус посланной «команды». Server может вернуть код, который относится к одной из пяти категорий:

КатегорияЧто значит
1xxИнформативные сообщения. На обработку «команды» такие коды никак не влияют.
2xxКоды, которые будут возвращаться при успешной обработке «команды».
3xxКоды, используемые для перенаправления пользователя.
4xxError. Коды, указывающие на то, что клиент сформировал некорректный запрос.
5xxПоказываются, если произошла ошибка сервера.

Далее более подробно будут рассмотрены категории 4xx и 5xx. Они помогут понять, когда и почему необходимо повторить запрос, указанный в заголовке.

Клиентские ошибки

К клиентским ошибкам (типа 4xx) относят:

  1. 400 Bad Request. Ответ от браузера, который может быть получен, если сервер не смог правильно отреагировать на посланную «команду». В основном появляется тогда, когда не соблюдается синтаксис протокола передачи.
  2. 401 Unauthorized. Появляется, если клиент использует неправильные авторизационные данные (authentication required).
  3. 402 Payment Required. Указывается при необходимости оплаты доступа к серверной части.
  4. 403 Forbidden. Работает аналогично ошибке 401. Серверная часть не позволяет подключение, хотя сама «команда» сформирована правильно. К проекту просто нет доступа.
  5. 404 Not Found. Наиболее распространенный вид ошибки. Появляется, если «команда» ведет в никуда. Выводится при попытке попасть на несуществующую страничку.
  6. 405 Method Not Allowed. Указывает на то, что метод, используемый клиентом, не разрешен. Пример – это попытка ввода данных в форму через Get со стороны клиента, если соответствующая операция работает только с Post.
  7. 406 Not Acceptable. Сообщение, которое указывает на то, что веб-сайт передает контент, который не может быть распознан с клиентской стороны. Проблема заключается в методе сжатия, формате страницы и так далее. Иногда высвечивается при неправильной конфигурации кодировки. Встречается код крайне редко.
  8. 407 Proxy Authentication Required. Работает почти так же, как и 401. Разница заключается в том, что логин и пароль требуются для прокси, а не для основного подключения.
  9. 408 Request Timeout. Разрыв соединения с клиентской частью ввиду того, что подключение не используется. Сервер долгое время ждал ответа, но соединение не было налажено. Эта ошибка часто появляется после длительной и безуспешной попытки зайти на ту или иную веб-страничку.
  10. 409 Conflict. Несоответствие запроса с клиентской стороны ожиданиям сервера.
  11. 410 Gone. Аналог 404 ошибки, который указывает на перманентность отсутствия веб-страницы.
  12. 411 Length Required. Сервер не хочет принимать «команды» со стороны клиента, потому что отсутствует определение заголовка Content-Length. 
  13. 412 Precondition Failed. Указывает на отклонение пользовательской «команды». Доступ к выбранному проекту не разрешен. В основном возникает ввиду неправильной настройки работы методов.
  14. 413 Payload Too Large. Посланная «команда» с клиентской стороны слишком длинная.
  15. 414 URL Too Long. Превышение лимита длины URL.
  16. 415 Unsupported Media Type. Загрузка данных на сервер в неподходящем формате.
  17. 429 Too Many Request. На сервер было послано слишком много запросов за небольшой промежуток времени.
  18. 450 Blocked Windows Parental Controls. Сообщение, которое будет часто преследовать детей. Оно указывает на родительский контроль от Microsoft. Высвечивается, если пользователь пытался посетить запрещенный родителем ресурс. Изменяется ситуация при помощи корректировки параметров упомянутой ранее службы.
  19. 431 Request Header Fields Too Large. В посылаемой «команде» применяются слишком длинные заголовки.

Перечисленные ошибки не являются исчерпывающими. Здесь можно увидеть еще несколько их примеров.

Серверные ошибки

Ошибки и неполадки могут возникать не из-за неправильных клиентских действий, а ввиду серверных сбоев. В основном такие сообщения появляются тогда, когда не удается обработать посланные «команды».

К числу серверных ошибок относят:

  1. 500 Internal Server Error. Это код, который появляется, если сервер сталкивается с непредвиденными обстоятельствами.
  2. 501 Not Implemented. Указывает на отсутствие реализации функциональности, необходимой для обработки «команды».
  3. 502 Bad Gateway. Встречается, если серверная сторона – это шлюз или прокси. Выскакивает, если обнаруживается несогласованность протоколов между вышестоящим сервером и его шлюзом.
  4. 503 Service Unavailable. Возникает, если не получается обработать запрос клиента по одной из двух технических причин. Первая – это слишком большое количество пользователей пытаются отправить запросы. У серверной части проекта не остается ресурсов для отправки ответа. Вторая – это проведение технических работ.
  5. 504 Gateway Timeout. Напоминает 408 ошибку. Здесь превышен тайм-аут при попытке сервера выйти на контакт с вышестоящим сервером.
  6. 505 HTTP Version Not Supported. В клиент-серверной модели используются разные протоколы подключения HTTP.
  7. 506 Variant Also Negotiates. Возникает при неправильной первоначальной настройке серверной стороны. Указывает на сбои базовых конфигураций.
  8. 507 Insufficient Storage. Указывает на нехватку со стороны серверной части пространства в хранилище для обработки клиентской «команды».
  9. 508 Loop Detected. Высвечивается при обнаружении бесконечного цикла в клиентском запросе. Может расцениваться как провал запроса и всей обрабатываемой операции.
  10. 509 Bandwidth Limit Exceeded. Указывает на то, что серверная сторона потребляет трафика больше, чем позволено.
  11. 510 Not Extended. Высвечивается, если клиент отправляет запрос на использование какого-либо расширения, отсутствующего на сервере. Исправляется путем избавления от декларирования неподдерживаемых расширений из конструкции. Можно добавить поддержку того или иного компонента на сервер.
  12. 511 Network Authentication Required. Указывает на то, что перед выходом в сеть необходимо авторизоваться.

Теперь понятно, какие HTTP-статусы встречаются в location заголовка. Лучше освоить протоколы подключения к Сети и вероятные ошибки, а также способы их исправления помогут специализированные компьютерные курсы.

P. S. Интересуют компьютерные сети, сетевые технологии, протоколы передачи данных? Обратите внимание на следующие курсы в Otus: