Основы 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» в исходном коде формы: