June 28, 2020

Основы HTTP


Протокол передачи гипертекста (HTTP) является основой передачи данных для Всемирной паутины и, следовательно, самым популярным протоколом приложений, используемым в Интернете.

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

Структура URL

Ресурсы HTTP однозначно идентифицируются URL-адресами (унифицированными указателями ресурсов) в форме http и UTPS https (унифицированных идентификаторов ресурсов).

URL-адреса имеют следующий синтаксис:
И ресурсосбережение имя пути порта /: протокол: // имя хоста

  • Протокол - протокол приложения. Обычно https или http в веб-API
  • Имя хоста - имя домена для идентификации хост-компьютера (веб-сервера)
  • Порт - номер порта TCP, на котором хост прослушивает клиентские запросы. Если опущено, для https-запросов оно будет равно 443, а для http-запросов - 80
  • Путь и имя ресурса - состоит из последовательности сегментов пути, разделенных косой чертой (/), и имени запрашиваемого ресурса и может включать расширение файла

Пример: https://www.utest.com/academy/tracks/1 где:

  • https это протокол
  • www.utest.com является доменом
  • `/ academy / track / 1` - это« путь и имя ресурса »- компонент
  • Поскольку порт не указан явно, клиент (то есть веб-браузер) устанавливает его на 443 по умолчанию, в этом случае


Структура HTTP-запроса и ответа

HTTP-запрос и HTTP-ответ - сообщения имеют одинаковую базовую структуру:

Пример HTTP-запроса:

Строка запроса указывает:

  • Метод HTTP
  • Ресурс («/»)
  • HTTP-версия («1.1»)


Общие методы HTTP:

  • GET - запросить конкретный ресурс, как использовано в примере выше
  • POST - разместить контент на сервере
  • HEAD - запрашивать только HTTP-заголовки для запроса, опуская тело ответного сообщения. Это может быть использовано для получения определенных опций конфигурации
  • OPTIONS - чтобы запросить описание параметров связи для целевого ресурса, сервер должен ответить списком поддерживаемых методов HTTP
  • PUT - еще один метод (среди «POST») для отправки контента на сервер. POST чаще используется на веб-страницах, тогда как PUT чаще используется в API
  • DELETE - дать указание веб-серверу удалить определенный ресурс или контент

Пример ответа HTTP:

Строка состояния указывает, был ли запрос успешным, также показывает версию HTTP и содержит код состояния http:

  • 200 ОК ... Запрос был успешным
  • 302 Found ... Указывает клиенту посмотреть (перейти на) другой URL
  • 400 Bad Request … Сервер не может или не будет обрабатывать запрос из-за ошибки клиента (например, синтаксическая ошибка, размер, формат сообщения)
  • 501 Not Implemented … Сервер не может выполнить запрос или не распознает метод запроса

Коды состояния ответа HTTP разделены на пять категорий, где первая цифра кода состояния определяет класс ответа:

  • 1xx (Информационный)
  • 2xx (Успешно)
  • 3xx (Перенаправление)
  • 4xx (Ошибка клиента)
  • 5xx (Ошибка сервера)


Заголовки запроса

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

  • Host: www.utest.com
    º Доменное имя сервера
  • User-agent: Mozilla / 5.0
    º Строка агента пользователя браузера
  • Accept: text / HTML, * / *
    º Часть согласования контента; допустимые типы носителей для ответа
  • Accept-Language: en-US, en
    º Список приемлемых человеческих языков для ответа (согласование контента)
  • Connection: close
    º Параметры управления для текущего соединения


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

Поля заголовка (также в заголовках запроса) представляют собой разделенные двоеточиями «key-value pairs».

  • Пример «Connection: close»
    º «Connection» является ключом
    º «Close» - это значение

Давайте разберем этот пример заголовков:

  • Date: пт, 06 сен 2019, 06:42:56 GMT
    º HTTP-дата определяет дату и время отправки сообщения («Время сервера»!)
  • Content-Type: text / html; кодировка = UTF-8
    º Тип MIME содержимого в теле ответного сообщения
  • Сonnection: close
    º Параметры управления для текущего соединения. «Закрыть» означает, что соединение будет закрыто после завершения ответа. Единственный другой возможный вариант - «keep-alive», указывающий, что могут следовать другие сообщения, и поэтому клиент должен поддерживать постоянное соединение
  • Cache-Control: без кеша
    º Это сообщает всем механизмам кэширования от сервера клиенту, могут ли они кэшировать это сообщение. Другим возможным значением может быть, например: «Cache-Control: max-age = 3600», измеряется в секундах. Указывает, что объект не может быть кэширован в течение более чем x секунд
  • Expires: четверг, 01 января 1970 года, 00:00:01 GMT
    º HTTP-дата, после которой ответ считается устаревшим
  • Content-Length: 3761
    º Длина тела ответа в байтах

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


Строки запроса

Существует множество вариантов передачи данных на веб-сервер в HTTP-запросах. На сайтах наиболее распространенными способами являются:

  • Строки запроса
  • JSON в фоновых запросах (без перезагрузки страницы)
  • Составные POST-запросы

В API данные часто передаются через XML или JSON вместо форм. Эти методы будут обсуждаться позже в этом курсе.
Давайте сначала посмотрим на «традиционный» способ передачи данных формы со строками запроса:

  • Запрос GET будет выглядеть так:


º На скриншоте выше показана простая HTML-форма с двумя полями ввода и кнопкой отправки. «Метод» формы определяется как «GET», который также является значением по умолчанию, если атрибут не указан

º После отправки входные данные будут отправлены в указанное местоположение «/test/demo_form.php» текущего хоста (где расположена форма): https://www.example.com/test/demo_form.php?name1= значение & имя2 = значение2

■ Как вы можете видеть, содержимое формы передается в URL-адресе запроса GET в форме строки запроса. Состоит из строки пар имя / значение, добавленной к целевой странице после знака вопроса. Отдельные пары имя / значение (имя1 = значение1 и имя2 = значение2) разделяются амперсандом &. Целевая страница определяется в параметре «action» формы

  • Тот же запрос при изменении метода на POST будет выглядеть так:

º Та же пара ключ / значение «имя1 = значение1 и имя2 = значение2» теперь передается в теле сообщения запроса в нижней части запроса, под пустой строкой, отделяющей его от заголовка сообщения.


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

Тип содержимого: application / x-www-form-urlencoded

º Выделенный заголовок типа содержимого сообщает серверу, что данные закодированы в URL. Это означает, что все символы не ASCII будут преобразованы. Например, пробел становится +, «@» становится «% 40» и т. Д.

  • Та же самая форма, передаваемая как multipart / form-data, путем определения атрибута «enctype», будет выглядеть так:

º Значения теперь разделены «границей», которая будет автоматически установлена браузером. Каждое значение имеет один или несколько дополнительных атрибутов. Этот метод обычно используется для форм загрузки файлов на веб-сайтах

º Обратите внимание на добавленный атрибут «enctype» в исходном коде формы:



Главная страница

Следующая статья