что такое http какие у него есть методы
Всё что нужно знать про HTTP
Jul 20, 2019 · 6 min read
HTTP расшифровывается «как протокол передачи гипертекста» — это протокол связи, используемый для просмотра веб-страниц. Этот протокол использует модель на основе сообщений — клиент совершает HTTP-запрос к серверу, на который сервер отвечает ресурсом, который отображается в браузере.
Каждое взаимодействие через HTTP включает в себя запрос и ответ. По своей природе HTTP не имеет состояния.
Без состояния означает, что все запросы отделены друг от друга, а значит —каждый запрос должен содержать достаточно информации, чтобы полностью выполниться. Это означает, что каждая транзакция HTTP-модели, основанной на сообщениях, обрабатывается отдельно от остальных.
URL (унифицирован н ый указатель ресурса) — вероятно, самая известная концепция интернета. Это также одна из самых важных и полезных концепций. URL-адрес — это веб-адрес, используемый для идентификации ресурсов в интернете.
Идея интернета структурирована вокруг ресурсов, с самого начала интернет был платформой для обмена текстовыми/HTML — файлами, документами, изображениями и т.д, и поэтому он может рассматриваться как совокупность ресурсов.
Протокол (Protocol — обычно это HTTP (или HTTPS для защищённой версии HTTP)
Другие примечательные протоколы:
Домен (Domain) — имя для идентификации одного или нескольких IP-адресов, на которых расположен ресурс.
Путь (Path) — указывает местоположение ресурса на сервере. Использует ту же логику, что и расположение ресурса на устройстве, которое вы читаете в этой статье (например, /search/cars/VWBeetle.pdf или C:/mycars/VWBeetle.pdf).
Параметры (Parameters) — дополнительные данные, используемые для идентификации или фильтрации ресурса на сервере.
При поиске статей и дополнительной информации об HTTP вы можете встретить термин URI (унифицированный идентификатор ресурса). URI иногда используется вместо URL, но в основном в формальных спецификациях и людьми, которые хотят похвастаться 🙂
HTTP-запросы
В HTTP каждый запрос должен иметь URL-адрес. К тому же, запросу необходим метод. Четыре главных HTTP метода это:
Я объясню эти и другие методы в разделе «HTTP-методы» этой статьи.
Эти методы прямо соответствуют действиям:
Все HTTP-сообщения имеют один или несколько заголовков, за которыми следует необязательное тело сообщения. Тело содержит данные, которые будут отправлены с запросом, или данные, полученные с ответом.
Первая часть каждого HTTP-запроса содержит три элемента:
Когда URL содержит знак «?» это означает, что он содержит запрос. Это означает, что он отправляет параметры запрошенного ресурса.
В HTTP-запросе есть и другие интересные вещи:
Referer header — сообщает URL-адрес, с которого поступил запрос.
User-Agent header — дополнительная информация об используемом браузере.
Host header — показывает имя хоста. Его следует уникально идентифицировать, это необходимо, когда несколько веб-страниц размещаются на одном сервере.
Cookie header — отправляет дополнительные параметры на клиент.
HTTP-ответы
Как и HTTP-запросы, HTTP-ответы состоят из трех элементов:
Например:
_HTTP/1.1 200 OK_
В 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 API в других статьях, следите за новостями.
HTTP-заголовки
Струтура запроса/ответа состоит из трёх частей:
Мы уже говорили о первой строке в HTTP-запросах и ответах, упоминали тело, а теперь поговорим о HTTP-заголовках.
HTTP-заголовки добавляются после первой строки и определяются как пары _имя:значение_, разделённые двоеточием. HTTP-заголовки используются для отправки дополнительных параметров вместе с запросом или ответом. Как мы уже говорили, тело сообщения содержит данные, которые будут отправлены вместе с запросом, или данные, полученные вместе с ответом.
Существуют различные типы заголовков, которые мы группируем на основе их использования в 4 широких категорий:
General header (Главные заголовки) — могут использоваться для всех типов сообщений (запроса и ответа) и независимы от передаваемых данных.
Request header (Заголовки запроса) — определяют параметры для запрашиваемых данных или параметры с важной информацией о клиенте, совершающем запрос.
Response header (Заголовки ответа) — содержат информацию об ответе
Entity header (Заголовки сущностей) — описывают содержимое, которое составляет тело сообщения.
HTTP-коды ответов
Каждый HTTP-ответ должен содержать код состояния HTTP, сообщающий результат запроса.
Существует пять групп кодов состояния. Их группируют по первой цифре:
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 это:
HTTP протокол: основные правила Интернета, которые должен знать каждый веб-разработчик. Как браузер взаимодействует с сервером.
Тема 7: Определение методов HTTP (HTTP Method Definitions). Методы HTTP запросов
Привет, читатель блога ZametkiNaPolyah.ru! Продолжим знакомиться с протоколом HTTP в рубрике серверы и протоколы и ее разделе HTTP протокол. В этой записи мы изучим с тобой HTTP методы. Для начала мы с тобой разберемся с видами HTTP методов, потом разберем безопасные HTTP методы, выделим идемпотентные методы. После чего я перечислю все HTTP методы с их кратким описание, а далее мы разберем каждый метод в отдельности. Надеюсь, примеры, используемые в данной публикации помогут тебе понять как работают все эти методы: GET, POST, HEAD, CONNECT, PUT, DELETE, OPTIONS и TRACE. Как всегда, если что-то непонятно или есть какие-то дополнения или заметил неточность — не стесняйся написать комментарий.
Определение методов HTTP (HTTP Method Definitions). Описание методов HTTP запросов
Виды HTTP методов запроса
Если вы хотите узнать всё про протокол HTTP, обратитесь к навигации по рубрике HTTP протокол. Стандарт HTTP 1.1 насчитывает восемь методов, но набор методов может быть расширен, хотя и не будет поддерживаться другими HTTP приложениями, которые полностью соответствую букве стандарта. Каждый HTTP запрос должен содержать метод. HTTP методы запроса делятся на идемпотентные и безопасные методы. Дам короткую справку: идемпотентные методы в HTTP должны при большом количестве идентичных HTTP запросах иметь такой же эффект, как и при одном единственном запросе, но в то же время ответ HTTP сервера не обязательно должен быть тем же самым. Вот такое вот противоречие.
Безопасные HTTP методы и идемпотентные HTTP методы запросов
Давайте посмотрим на разницу между HTTP методами. Сперва рассмотрим безопасные методы. HTTP стандарт четко говорит о том, что программа, которая работает с сетью интернет, представляет пользователя, поэтому она должна информировать пользователя о любых действиях, которые происходят и которые он может произвести, но которые могут иметь непредсказуемые значения для самого пользователя или для других лиц. Другими словами: ваш браузер должен информировать вас о любых действия во время HTTP соединения. Это не всегда так, но, по крайней мере, так сказано в стандарте протокола HTTP 1.1.
Безопасные HTTP методы (Safe method HTTP)
На данный момент принято соглашение о том, что HTTP методы GET и HEAD никогда не должны иметь иного значения, кроме загрузки, поэтому данные HTTP методы нужно рассматривать, как безопасные, это требование HTTP. Поэтому ваш браузер, когда используются методы POST, PUT или DELETE предупреждает вас о том, что может произойти потенциально опасное действие и спрашивает: нужно ли его выполнить.
Идемпотентные HTTP методы (Idempotent Methods HTTP)
Я уже вкратце объяснил суть идемпотентных HTTP методов: при использование таких методов побочные эффекты одинаковы как в случае однократного запроса, так и в случае многократного повторения одного и того же запроса, т.е. нагрузка одинакова, но HTTP ответ от сервера может поступать каждый раз разный. К идемпотентным методам относятся следующие HTTP методы: GET, HEAD, PUT и DELETE. Так же эффектом идемпотентности обладают HTTP методы OPTIONS и TRACE.
Краткий обзор HTTP методов
Давайте перечислим все методы HTTP протокола и дадим им краткое описание. Для удобства сведем HTTP методы в таблицу
Номер | HTTP метод и его описание |
1 | HTTP метод GET Метода GET в HTTP используется для получения информации от сервера по заданному URI (URI в HTTP). Запросы клиентов, использующие метод GET должны получать только данные и не должны никак влиять на эти данные. |
2 | HTTP метод HEAD HTTP метод HEAD работает точно так же, как GET, но в ответ сервер посылает только заголовки и статусную строку без тела HTTP сообщения. |
3 | HTTP метод POST HTTP метод POST используется для отправки данных на сервер, например, из HTML форм, которые заполняет посетитель сайта. |
4 | HTTP метод PUT HTTP метод PUT используется для загрузки содержимого запроса на указанный в этом же запросе URI. |
5 | HTTP метод DELETE HTTP метод DELETE удаляет указанный в URI ресурс. |
6 | HTTP метод CONNECT HTTP метод CONNECT преобразует существующее соединение в тоннель. |
7 | HTTP метод OPTIONS HTTP метод OPTIONS используется для получения параметров текущего HTTP соединения. |
8 | HTTP метод TRACE HTTP метод TRACE создает петлю, благодаря которой клиент может увидеть, что происходит с сообщением на всех узлах передачи. |
Мы вкратце рассмотрели все HTTP методы и дали им короткую характеристику. Давайте теперь более подробно остановимся на каждом из HTTP методов и приведем несколько примеров использования HTTP методов.
Описание HTTP метода GET. Пример использования HTTP метода GET
HTTP метод GET позволяет получать информацию с HTTP сервера. Информация, получаемая от сервера может быть любой, главное, чтобы она была в форме HTTP объекта, доступ к информации при использовании метода GET осуществляется через URI. Часто бывает так, что HTTP метод GET обращается к какому-то коду, а не к конкретной страницы (все CMS генерируют контент налету), поэтому метод GET работает так, что мы получаем не исходный код, который генерирует текст, а сам текст.
HTTP метод GET бывает двух видов: условный метод GET и частичный метод GET. Давайте сперва посмотрим на условный метод GET. Когда используется условный HTTP метод GET, то к HTTP сообщению добавляются следующие поля заголовков: If-Modified-Since, If-Unmodified-Since, If-Match, If-None-Match, или If-Range. Значение таких полей является какое-либо условие и если это условие выполняется, то происходит передача объекта, который хранится по указанному URI, если же условие не выполняется, то и сервер не передает никаких данных. Условный HTTP метод GET предназначен для уменьшения нагрузки на сеть.
Давайте теперь посмотрим на особенности работы частичного HTTP метода GET. Особенность частичного метода GET заключается в том, что в его заголовке присутствует поле Range. Когда используется частичные метод GET полезная информация, предназначенная для человека передается кусками, после чего она из этих кусков собирается. Не напоминает ли это вам скачивание файлов по HTTP протоколу, когда мы можем остановить загрузку, отключить браузер, потом опять включить браузер и закачка будет происходить ровно с того места, где она была приостановлена. Не стоит забывать, что поля заголовков — это параметры HTTP протокола, которые определяют, как будут работать клиент и сервер.
Сервер может кэшировать ответы на запросы с HTTP методом GET, но при соблюдение определенных требований, о которых мы поговорим чуть позже. Давайте лучше самостоятельно напишем HTTP запрос с методом GET и посмотрим, какой ответ мы можем получить от сервера:
Обзор протокола HTTP
HTTP — это протокол, позволяющий получать различные ресурсы, например HTML-документы. Протокол HTTP лежит в основе обмена данными в Интернете. HTTP является протоколом клиент-серверного взаимодействия, что означает инициирование запросов к серверу самим получателем, обычно веб-браузером (web-browser). Полученный итоговый документ будет (может) состоять из различных поддокументов, являющихся частью итогового документа: например, из отдельно полученного текста, описания структуры документа, изображений, видео-файлов, скриптов и многого другого.
Клиенты и серверы взаимодействуют, обмениваясь одиночными сообщениями (а не потоком данных). Сообщения, отправленные клиентом, обычно веб-браузером, называются запросами, а сообщения, отправленные сервером, называются ответами.
Составляющие систем, основанных на HTTP
HTTP — это клиент-серверный протокол, то есть запросы отправляются какой-то одной стороной — участником обмена (user-agent) (либо прокси вместо него). Чаще всего в качестве участника выступает веб-браузер, но им может быть кто угодно, например, робот, путешествующий по Сети для пополнения и обновления данных индексации веб-страниц для поисковых систем.
Каждый запрос (англ. request) отправляется серверу, который обрабатывает его и возвращает ответ (англ. response). Между этими запросами и ответами как правило существуют многочисленные посредники, называемые прокси, которые выполняют различные операции и работают как шлюзы или кэш, например.
Обычно между браузером и сервером гораздо больше различных устройств-посредников, которые играют какую-либо роль в обработке запроса: маршрутизаторы, модемы и так далее. Благодаря тому, что Сеть построена на основе системы уровней (слоёв) взаимодействия, эти посредники «спрятаны» на сетевом и транспортном уровнях. В этой системе уровней HTTP занимает самый верхний уровень, который называется «прикладным» (или «уровнем приложений»). Знания об уровнях сети, таких как представительский, сеансовый, транспортный, сетевой, канальный и физический, имеют важное значение для понимания работы сети и диагностики возможных проблем, но не требуются для описания и понимания HTTP.
Клиент: участник обмена
Участник обмена (user agent) — это любой инструмент или устройство, действующие от лица пользователя. Эту задачу преимущественно выполняет веб-браузер; в некоторых случаях участниками выступают программы, которые используются инженерами и веб-разработчиками для отладки своих приложений.
Браузер всегда является той сущностью, которая создаёт запрос. Сервер обычно этого не делает, хотя за многие годы существования сети были придуманы способы, которые могут позволить выполнить запросы со стороны сервера.
Веб-страница является гипертекстовым документом. Это означает, что некоторые части отображаемого текста являются ссылками, которые могут быть активированы (обычно нажатием кнопки мыши) с целью получения и соответственно отображения новой веб-страницы (переход по ссылке). Это позволяет пользователю «перемещаться» по страницам сети (Internet). Браузер преобразует эти гиперссылки в HTTP-запросы и в дальнейшем полученные HTTP-ответы отображает в понятном для пользователя виде.
Веб-сервер
На другой стороне коммуникационного канала расположен сервер, который обслуживает (англ. serve) пользователя, предоставляя ему документы по запросу. С точки зрения конечного пользователя, сервер всегда является некой одной виртуальной машиной, полностью или частично генерирующей документ, хотя фактически он может быть группой серверов, между которыми балансируется нагрузка, то есть перераспределяются запросы различных пользователей, либо сложным программным обеспечением, опрашивающим другие компьютеры (такие как кеширующие серверы, серверы баз данных, серверы приложений электронной коммерции и другие).
Прокси
Между веб-браузером и сервером находятся большое количество сетевых узлов, передающих HTTP сообщения. Из-за слоистой структуры большинство из них оперируют также на транспортном сетевом или физическом уровнях, становясь прозрачным на HTTP слое и потенциально снижая производительность. Эти операции на уровне приложений называются прокси. Они могут быть прозрачными или нет, (изменяющие запросы не пройдут через них), и способны исполнять множество функций:
Основные аспекты HTTP
Даже с большей сложностью, введённой в HTTP/2 путём инкапсуляции HTTP-сообщений в фреймы, HTTP, как правило, прост и удобен для восприятия человеком. HTTP-сообщения могут читаться и пониматься людьми, обеспечивая более лёгкое тестирование разработчиков и уменьшенную сложность для новых пользователей.
Введённые в HTTP/1.0 HTTP-заголовки сделали этот протокол лёгким для расширения и экспериментирования. Новая функциональность может быть даже введена простым соглашением между клиентом и сервером о семантике нового заголовка.
HTTP не имеет состояния, но имеет сессию
HTTP не имеет состояния: не существует связи между двумя запросами, которые последовательно выполняются по одному соединению. Из этого немедленно следует возможность проблем для пользователя, пытающегося взаимодействовать с определённой страницей последовательно, например, при использовании корзины в электронном магазине. Но хотя ядро HTTP не имеет состояния, куки позволяют использовать сессии с сохранением состояния. Используя расширяемость заголовков, куки добавляются к рабочему потоку, позволяя сессии на каждом HTTP-запросе делиться некоторым контекстом или состоянием.
HTTP и соединения
Соединение управляется на транспортном уровне, и потому принципиально выходит за границы HTTP. Хотя HTTP не требует, чтобы базовый транспортного протокол был основан на соединениях, требуя только надёжность, или отсутствие потерянных сообщений (т.е. как минимум представление ошибки). Среди двух наиболее распространённых транспортных протоколов Интернета, TCP надёжен, а UDP — нет. HTTP впоследствии полагается на стандарт TCP, являющийся основанным на соединениях, несмотря на то, что соединение не всегда требуется.
HTTP/1.0 открывал TCP-соединение для каждого обмена запросом/ответом, имея два важных недостатка: открытие соединения требует нескольких обменов сообщениями, и потому медленно, хотя становится более эффективным при отправке нескольких сообщений, или при регулярной отправке сообщений: тёплые соединения более эффективны, чем холодные.
Проводятся эксперименты по разработке лучшего транспортного протокола, более подходящего для HTTP. Например, Google экспериментирует с QUIC (которая основана на UDP) для предоставления более надёжного и эффективного транспортного протокола.
Чем можно управлять через HTTP
Естественная расширяемость HTTP со временем позволила большее управление и функциональность Сети. Кеш и методы аутентификации были ранними функциями в истории HTTP. Способность ослабить первоначальные ограничения, напротив, была добавлена в 2010-е.
Ниже перечислены общие функции, управляемые с HTTP.
HTTP поток
Когда клиент хочет взаимодействовать с сервером, являющимся конечным сервером или промежуточным прокси, он выполняет следующие шаги:
Если активирован HTTP-конвейер, несколько запросов могут быть отправлены без ожидания получения первого ответа целиком. HTTP-конвейер тяжело внедряется в существующие сети, где старые куски ПО сосуществуют с современными версиями. HTTP-конвейер был заменён в HTTP/2 на более надёжные мультиплексные запросы во фрейме.
HTTP сообщения
HTTP/1.1 и более ранние HTTP сообщения человекочитаемые. В версии HTTP/2 эти сообщения встроены в новую бинарную структуру, фрейм, позволяющий оптимизации, такие как компрессия заголовков и мультиплексирование. Даже если часть оригинального HTTP сообщения отправлена в этой версии HTTP, семантика каждого сообщения не изменяется и клиент воссоздаёт (виртуально) оригинальный HTTP-запрос. Это также полезно для понимания HTTP/2 сообщений в формате HTTP/1.1.
Существует два типа HTTP сообщений, запросы и ответы, каждый в своём формате.
Запросы
Примеры HTTP запросов:
Запросы содержат следующие элементы:
Ответы
Ответы содержат следующие элементы:
Вывод
HTTP — лёгкий в использовании расширяемый протокол. Структура клиент-сервера, вместе со способностью к простому добавлению заголовков, позволяет HTTP продвигаться вместе с расширяющимися возможностями Сети.
Хотя HTTP/2 добавляет некоторую сложность, встраивая HTTP сообщения во фреймы для улучшения производительности, базовая структура сообщений осталась с HTTP/1.0. Сессионный поток остаётся простым, позволяя исследовать и отлаживать с простым монитором HTTP-сообщений.