HTTP – текстовый протокол, работающий поверх TCP/IP. HTTP состоит из запроса и ответа. Их структуры похожи: стартовая строка, заголовки, тело ответа.
Стартовая строка запроса состоит из метода, пути и версии протокола:
GET /index.html HTTP/1.1
Стартовая строка ответа состоит из версии протокола, кода ответа и текстовой расшифровке ответа.
HTTP/1.1 200 OK
Заголовки – это набор пар ключ-значение, например, User-Agent
, Content-Type
. В заголовках передают метаданные запроса: язык пользователя, авторизацию, перенаправление. Заголовок Host
должен быть в запросе всегда.
Тело ответа может быть пустым, либо может передавать пары переменных, файлы, бинарные данные. Тело отделяется от заголовков пустой строкой.
GET / HTTP/1.1
Host: ya.ru
Проверить статус ответа. Ответы разделены старшему разряду. Имеем пять групп со следующей семантикой:
1xx
: используется крайне редко. В этой группе только один статус 100 Continue
.2xx
: запрос прошел успешно (данные получены или созданы)3xx
: перенаправление на другой ресурс4xx
: ошибка по вине пользователя (нет такой страницы, нет прав на доступ)5xx
: ошибка по вине сервера (ошибка в коде, сети, конфигурации)Минимальный ответ должен иметь статус 301
или 302
. Заголовок Location
указывает адрес ресурса, на который следует перейти.
В теле ответа можно разместить HTML
со ссылкой на новый ресурс. Тогда пользователи старых браузеров смогут перейти вручную.
Существуют несколько способов кешировать данные на уровне протокола.
Cache
и Cache-Control
регулируют сразу несколько критериев кеша: время жизни, политику обновления, поведение прокси-сервера, тип данных (публичные, приватные).Last-Modified
и If-Modified-Since
задают кеширование в зависимости от даты обновления документа.Etag
кеширует документ по его уникальному хешу.Когда Nginx
отдает статичный файл, он добавляет заголовок Etag
– MD5
-хеш файла. Клиент запоминает этот хеш. В следующий раз при запросе файла клиент посылает хеш. Сервер проверяет хеш клиента для этого файла. Если хеш не совпадает (файл обновили), сервер отвечает с кодом 200
и выгружает актуальный файл с новым хешем. Если хеши равны, сервер отвечает с кодом 304 Not Modified
с пустым телом. В этом случае браузер подставляет локальную копию файла.
HTTP — широко распространённый протокол передачи данных, изначально предназначенный для передачи гипертекстовых документов (то есть документов, которые могут содержать ссылки, позволяющие организовать переход к другим документам).
Аббревиатура HTTP расшифровывается как HyperText Transfer Protocol, «протокол передачи гипертекста». В соответствии со спецификацией OSI, HTTP является протоколом прикладного (верхнего, 7-го) уровня. Актуальная на данный момент версия протокола, HTTP 1.1, описана в спецификации RFC 2616.
Протокол HTTP предполагает использование клиент-серверной структуры передачи данных. Клиентское приложение формирует запрос и отправляет его на сервер, после чего серверное программное обеспечение обрабатывает данный запрос, формирует ответ и передаёт его обратно клиенту. После этого клиентское приложение может продолжить отправлять другие запросы, которые будут обработаны аналогичным образом.
Задача, которая традиционно решается с помощью протокола HTTP — обмен данными между пользовательским приложением, осуществляющим доступ к веб-ресурсам (обычно это веб-браузер) и веб-сервером. На данный момент именно благодаря протоколу HTTP обеспечивается работа Всемирной паутины.
Также HTTP часто используется как протокол передачи информации для других протоколов прикладного уровня, таких как SOAP, XML-RPC и WebDAV. В таком случае говорят, что протокол HTTP используется как «транспорт».
HTTP — прикладной протокол передачи данный, используемый для получения информации с веб-сайтов.
HTTPS — расширение протокола HTTP, поддерживающее шифрование по протоколам SSL и TLS.