Всё что нужно знать про HTTP

Daria Moreno-Gogoleva
6 min readJul 20, 2019

--

Перевод статьи Goran Aviani HTTP and everything you need to know about it.

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

Каждое взаимодействие через HTTP включает в себя запрос и ответ. По своей природе HTTP не имеет состояния.

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

URL

URL (унифицированный указатель ресурса) — вероятно, самая известная концепция интернета. Это также одна из самых важных и полезных концепций. URL-адрес — это веб-адрес, используемый для идентификации ресурсов в интернете.

Идея интернета структурирована вокруг ресурсов, с самого начала интернет был платформой для обмена текстовыми/HTML — файлами, документами, изображениями и т.д, и поэтому он может рассматриваться как совокупность ресурсов.

Пример URL

Протокол (Protocol — обычно это HTTP (или HTTPS для защищённой версии HTTP)

https://medium.com/faun/http-and-everything-you-need-to-know-about-it-8273bc224491

Другие примечательные протоколы:

  • File Transfer Protocol (FTP) — это стандартный протокол, используемый для передачи файлов между клиентом и сервером по сети.
  • Simple Mail Transfer Protocol (SMTP) является стандартом для передачи электронной почты.

Домен (Domain) — имя для идентификации одного или нескольких IP-адресов, на которых расположен ресурс.

Путь (Path) — указывает местоположение ресурса на сервере. Использует ту же логику, что и расположение ресурса на устройстве, которое вы читаете в этой статье (например, /search/cars/VWBeetle.pdf или C:/mycars/VWBeetle.pdf).

Параметры (Parameters) — дополнительные данные, используемые для идентификации или фильтрации ресурса на сервере.

Нужно заметить

При поиске статей и дополнительной информации об HTTP вы можете встретить термин URI (унифицированный идентификатор ресурса). URI иногда используется вместо URL, но в основном в формальных спецификациях и людьми, которые хотят похвастаться :)

HTTP-запросы

В HTTP каждый запрос должен иметь URL-адрес. К тому же, запросу необходим метод. Четыре главных HTTP метода это:

  • GET
  • PUT
  • POST
  • DELETE

Я объясню эти и другие методы в разделе «HTTP-методы» этой статьи.

Эти методы прямо соответствуют действиям:

  • читать
  • обновить
  • создать
  • удалить

Все HTTP-сообщения имеют один или несколько заголовков, за которыми следует необязательное тело сообщения. Тело содержит данные, которые будут отправлены с запросом, или данные, полученные с ответом.

Первая часть каждого HTTP-запроса содержит три элемента:

Например:

  • _GET/adds/search-result?item=vw+beetleHTTP/1.1_

Когда URL содержит знак «?» это означает, что он содержит запрос. Это означает, что он отправляет параметры запрошенного ресурса.

  1. Первая часть — это метод, который сообщает, какой метод HTTP используется. Чаще всего используется метод GET. Метод GET извлекает ресурс с веб-сервера, и поскольку у GET нет тела сообщения, после заголовка ничего не требуется
  2. Вторая часть — запрошенный URL.
  3. Третья часть — используемая версия HTTP. Версия 1.1. является наиболее распространенной для большинства браузеров, однако, версия 2.0 становится популярнее.

В HTTP-запросе есть и другие интересные вещи:

Referer header — сообщает URL-адрес, с которого поступил запрос.

User-Agent header — дополнительная информация об используемом браузере.

Host header — показывает имя хоста. Его следует уникально идентифицировать, это необходимо, когда несколько веб-страниц размещаются на одном сервере.

Cookie header — отправляет дополнительные параметры на клиент.

HTTP-ответы

Как и HTTP-запросы, HTTP-ответы состоят из трех элементов:

Например:
_HTTP/1.1 200 OK_

  1. Первая часть — версия HTTP.
  2. Вторая часть — цифровой код результата запроса.
  3. Третья часть — текстовое объяснение второй части.

В HTTP-ответе есть и другие интересные вещи:
Server header — показывает программное обеспечение сервера.

Set-Cookie header — используется для создания cookie в браузере.

Message body — обычно HTTP-ответ содержит тело сообщения.

Content-Length header — сообщает размер тела сообщения в байтах.

HTTP-методы

Наиболее распространёнными методами являются GET и POST, но бывают и другие.

GET — используется для запросы данных с определенного ресурса, на котором данные не изменяются, поскольку GET-запросы не изменяют состояние ресурса.

POST — используется для отправки данных на сервер для создания ресурса.

PUT — метод для обновления существующего на сервере ресурса, используя содержимое тела запроса.

HEAD — этот метод выполняет ту же функцию, что и GET-метод, но с той разницей, что HEAD не содержит тело запроса. Но он вернёт те же заголовки, что и метод GET. Метод HEAD используют для проверки существования ресурса, перед выполнением метода GET.

TRACE — метод предназначен для диагностических целей. Ответ будет содержать в своем теле точное содержание запроса.

OPTIONS — этот метод используется для описания параметров связи (методов HTTP), доступных для целевого ресурса.

PATCH — используется для применения частичных модификаций к ресурсу..

DELETE — удаляет определённый ресурс.

REST

Передача репрезентативного состояния (REST) — это стиль архитектуры, в котором запрос и ответы содержат представление текущего состояния системного ресурса.

_”Обычный” путь:_

  • _http://carapp.com/search?make=wv&model=beetle_

_REST:_

  • _http://carapp.com/search/vw/beetle_

Я буду говорить больше о REST API в других статьях, следите за новостями.

HTTP-заголовки

Струтура запроса/ответа состоит из трёх частей:

  • Первая строчка
  • Заголовки
  • Тело

Мы уже говорили о первой строке в HTTP-запросах и ответах, упоминали тело, а теперь поговорим о HTTP-заголовках.

HTTP-заголовки добавляются после первой строки и определяются как пары _имя:значение_, разделённые двоеточием. HTTP-заголовки используются для отправки дополнительных параметров вместе с запросом или ответом. Как мы уже говорили, тело сообщения содержит данные, которые будут отправлены вместе с запросом, или данные, полученные вместе с ответом.

Существуют различные типы заголовков, которые мы группируем на основе их использования в 4 широких категорий:

General header (Главные заголовки) — могут использоваться для всех типов сообщений (запроса и ответа) и независимы от передаваемых данных.

Request header (Заголовки запроса) — определяют параметры для запрашиваемых данных или параметры с важной информацией о клиенте, совершающем запрос.

Response header (Заголовки ответа) — содержат информацию об ответе

Entity header (Заголовки сущностей) — описывают содержимое, которое составляет тело сообщения.

Типы заголовков

HTTP-коды ответов

Каждый HTTP-ответ должен содержать код состояния HTTP, сообщающий результат запроса.

Существует пять групп кодов состояния. Их группируют по первой цифре:

  • 1xx — Информационные.
  • 2xx — Запрос прошел успешно.
  • 3xx — Клиент был перенаправлен на другой ресурс.
  • 4xx — Запрос содержит ошибку.
  • 5xx — Сервер совершил ошибку при выполнении запроса.

Полный список кодов ответов HTTP с описаниями:
https://developer.mozilla.org/en-US/docs/Web/HTTP/Status

HTTPS (Hypertext Transfer Protocol Secure)

Безопасной версией протокола HTTP является HyperText Transfer Protocol Secure — защищённый протокол передачи гипертекста (HTTPS). HTTPS обеспечивает шифрованную связь между браузером (клиентом) и веб-сайтом (сервером).

В HTTPS протокол связи шифруется с использованием безопасности транспортного уровня (TLS) или уровня защищенных сокетов (SSL).

Также протокол часто называют HTTP поверх TLS или HTTP поверх SSL.

Оба протокола TLS и SSL используют систему асимметричного шифрования. Система асимметричного шифрования использует открытый ключ (ключ шифрования) и закрытый ключ (ключи дешифрования) для шифрования сообщения. Любой может использовать открытый ключ для шифрования сообщения. Однако закрытые ключи являются секретными, и это означает, что только предполагаемый получатель может расшифровать сообщение.

Пример асимметричной системы шифрования

SSL/TLS handshake

При запросе HTTPS-соединения с сайтом, сайт отправляет свой SSL-сертификат вашему браузеру. Этот процесс, когда ваш браузер и веб-сайт инициируют связь, называется «SSL/TLS handshake».

SSL/TLS handshake включает в себя ряд шагов, когда браузер и веб-сайт проверяют друг друга и начинают связь через туннель SSL/TLS.

Можно заметить, что во время соединения HTTPS используется надежный защищённый туннель и в адресной строке браузера отображается зеленый значок замка.

Пример одной из моих защищенных страниц

Преимущества HTTPS

Главные преимущества HTTPS это:

  • Защита информации клиентов — например номера кредитных карт и другая конфиденциальная информация,зашифрована и не может быть перехвачена.
  • Посетители могут подтвердить, что вы являетесь зарегистрированным предприятием и владеете доменом.
  • Клиенты знают, что им не следует посещать сайты без HTTPS, и поэтому они с большей вероятностью будут доверять и совершать покупки на сайтах, использующих HTTPS.

Спасибо за чтение! Ознакомьтесь с другими статьями и многим другим на моей странице Github: https://github.com/GoranAviani

--

--