Всё что нужно знать про HTTP
Перевод статьи Goran Aviani HTTP and everything you need to know about it.
HTTP расшифровывается «как протокол передачи гипертекста» — это протокол связи, используемый для просмотра веб-страниц. Этот протокол использует модель на основе сообщений — клиент совершает HTTP-запрос к серверу, на который сервер отвечает ресурсом, который отображается в браузере.
Каждое взаимодействие через HTTP включает в себя запрос и ответ. По своей природе HTTP не имеет состояния.
Без состояния означает, что все запросы отделены друг от друга, а значит —каждый запрос должен содержать достаточно информации, чтобы полностью выполниться. Это означает, что каждая транзакция HTTP-модели, основанной на сообщениях, обрабатывается отдельно от остальных.
URL
URL (унифицированный указатель ресурса) — вероятно, самая известная концепция интернета. Это также одна из самых важных и полезных концепций. URL-адрес — это веб-адрес, используемый для идентификации ресурсов в интернете.
Идея интернета структурирована вокруг ресурсов, с самого начала интернет был платформой для обмена текстовыми/HTML — файлами, документами, изображениями и т.д, и поэтому он может рассматриваться как совокупность ресурсов.
Протокол (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 содержит знак «?» это означает, что он содержит запрос. Это означает, что он отправляет параметры запрошенного ресурса.
- Первая часть — это метод, который сообщает, какой метод HTTP используется. Чаще всего используется метод GET. Метод GET извлекает ресурс с веб-сервера, и поскольку у GET нет тела сообщения, после заголовка ничего не требуется
- Вторая часть — запрошенный URL.
- Третья часть — используемая версия HTTP. Версия 1.1. является наиболее распространенной для большинства браузеров, однако, версия 2.0 становится популярнее.
В HTTP-запросе есть и другие интересные вещи:
Referer header — сообщает URL-адрес, с которого поступил запрос.
User-Agent header — дополнительная информация об используемом браузере.
Host header — показывает имя хоста. Его следует уникально идентифицировать, это необходимо, когда несколько веб-страниц размещаются на одном сервере.
Cookie header — отправляет дополнительные параметры на клиент.
HTTP-ответы
Как и HTTP-запросы, HTTP-ответы состоят из трех элементов:
Например:
_HTTP/1.1 200 OK_
- Первая часть — версия HTTP.
- Вторая часть — цифровой код результата запроса.
- Третья часть — текстовое объяснение второй части.
В 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