- Гипертекст и HTML
- 5 последних уроков рубрики «Разное»
- Форматы сообщений запроса/ответа
- Общие заголовки
- Заголовки сущностей
- Преимущества и недостатки протокола
- Достоинства
- Недостатки
- Специфика HTTP
- Методы доступа
- Метод GET
- Метод HEAD
- Метод POST
- Метод PUT
- URL — уникальное положение ресурса
- Место протокола HTTP в стеке протоколов TCP/IP
- Итог
- Оптимизация обмена
- Кодировка GET и POST-запросов.
- Версии протокола HTTP
- Формат ответа
- Библиотеки для работы с HTTP — jQuery AJAX
- Структура пакета HTTP
- Инструменты для определения HTTP трафика
- Формат запроса
- Коды состояния
- Методы HTML
- Статусы HTTP
Гипертекст и HTML
Гипертекст — это особый тип разметки, который вы добавляете в текстовые документы, чтобы определить, как отображается конкретный фрагмент текста. В HTML для этого используются теги.
Например, тег h1˃ говорит, что следующий заголовок протокола HTTP, а закрывающий тег h1˃ завершен. Тег u1˃ указывает на список, а ˂li˃ — это элемент списка.
Вот как этот гипертекстовый HTML-документ показывает браузер.
Протокол заголовка HTTP. Простой текст, цитируемый без разметки «Тим Бернер-Ли из ЦЕРН предложил концепцию Интернета в 1989 году». И список.
5 последних уроков рубрики «Разное»
- Как выбрать хороший хостинг для своего сайта?
Выбор хорошего хостинга для вашего сайта — довольно сложная задача. Тем более, что сейчас на рынке хостинговых услуг несколько сотен операторов с очень привлекательными предложениями. Хороший вариант — лидер классификации Hosting Ninja — Machost.
- Как разместить свой сайт? Правильно подобранный хороший хостинг — будущее ваших сайтов
Проект готов, все проверено на локальном сервере OpenServer и есть возможность переносить размещенный сайт. Но какую компанию выбрать? Рассмотрим хостинг fornex.com. Отличное место для вашего проекта с перспективой взрывного роста.
- Разработка веб-сайтов на онлайн-платформе Wrike
Создание сайта — это трудоемкий процесс, требующий слаженного взаимодействия между заказчиком и подрядчиком, а также между всеми членами команды, задействованными в проекте. И онлайн-платформа Wrike будет в этом большим подспорьем.
- 20 ресурсов для прототипирования
Подборка десятков ресурсов для создания мокапов и прототипов.
- 10 лучших бесплатных хостингов
Небольшая подборка бесплатных хостинг-провайдеров с подробным описанием.
Форматы сообщений запроса/ответа
На следующем изображении вы можете увидеть схематическую диаграмму процесса отправки запроса клиентом, обработки и отправки ответа сервером.
Давайте посмотрим на структуру сообщения, передаваемого по HTTP:
сообщение = *(<message-хедер>) CRLF = Строка запроса | Строка состояния <message-хедер>= Имя поля ‘:’ Значение поля
Между заголовком и телом сообщения должна быть пустая строка. Заголовков может быть несколько:
- Общие заголовки
- Заголовки запросов
- Заголовки ответа
- Заголовки сущностей
Тело ответа может содержать полную информацию или ее часть, если соответствующая функция включена (Transfer-Encoding: chunked). HTTP / 1.1 также поддерживает заголовок Transfer-Encoding.
</message-хедер></message-хедер>
Общие заголовки
Есть несколько типов заголовков, которые используются как в запросах, так и в ответах:
general-header = Управление кешем | Подключение | Дата | Прагма | Трейлер | Кодирование передачи | Обновление | Улица | Предупреждение
Что-то мы уже рассматривали в этой статье, более подробно затронем во второй части.
Заголовок via используется в запросе TRACE и обновляется всеми прокси.
Заголовок Pragma используется для перечисления настраиваемых заголовков. Например, Pragma: no-cache — это то же самое, что Cache-Control: no-cache. Подробнее об этом мы поговорим во второй части.
Заголовок Date используется для хранения даты и времени запроса / ответа.
Заголовок Upgrade используется для изменения протокола.
Transfer-Encoding стремится разделить ответ на несколько блоков с помощью Transfer-Encoding: chunked. Это новинка HTTP / 1.1.
Заголовки сущностей
Метаинформация содержимого передается в заголовках сущностей:
заголовок-сущность = Разрешить | Кодирование контента | Content-Language | Content-Length | Content-Position | Content-MD5 | Диапазон содержания | Тип содержания | Истекает | Последнее редактирование
Все заголовки с префиксом Content: предоставляют информацию о структуре, кодировке и размере тела сообщения.
Заголовок Expires содержит дату и время истечения срока действия объекта. Значение «никогда не истекает» означает время + 1 код с этого момента. Последнее изменение содержит время и дату последнего изменения объекта.
С помощью этих заголовков вы можете указать информацию, необходимую для вашей деятельности.
Преимущества и недостатки протокола
Достоинства
- Интернет-протокол HTTP позволяет легко создавать нужные вам клиентские приложения.
- вы можете расширить начальные возможности протокола, введя свои личные заголовки.
- Протокол поддерживается в качестве клиента большим количеством программ, и вы можете выбирать из множества хостинговых компаний с HTTP-серверами.
Недостатки
- Протокол HTTP явно не содержит возможности перемещаться по ресурсам сервера.
- Нет поддержки распространения. Промышленное применение Интернет-протокола HTTP с использованием распределенных вычислений с большой нагрузкой на сервер оказывается непригодным.
Специфика HTTP
Интернет-протокол HTTP отличается от других протоколов тем, что он создает отдельный сеанс TCP для любых запросов. В более поздних версиях протокола во время сеанса TCP разрешалось выполнять несколько запросов. Но при этом браузеры, как правило, запрашивают только страницу и объекты, которые на ней находятся (изображения, таблицы стилей и т.д.), А затем немедленно завершают сеанс TCP.
TCP / IP
Для поддержки авторизованного доступа протокол HTTP использует файлы cookie, которые представляют собой небольшие фрагменты данных, отправляемые с веб-сервера и хранящиеся на компьютере в браузере. Веб-клиент, пытаясь открыть страницу желаемого сайта, отправляет эту информацию на веб-сервер в виде HTTP-запроса.
Методы доступа
Самая важная директива HTTP-запроса — это метод доступа. Обозначается первым словом в первой строке запроса. В нашем примере это GET. Есть четыре основных способа доступа:
- ПОЛУЧАТЬ
- ГОЛОВА
- ОТПРАВИТЬ
- ПОЛОЖИТЬ
Помимо этих четырех методов существует еще около пяти дополнительных методов доступа, но они редко реализуются на практике.
Метод GET
По умолчанию метод GET используется клиентом при отправке запроса на сервер. В этом методе клиент предоставляет адрес ресурса (URL), который он хочет получить, версию протокола HTTP, поддерживаемые типы MIME документов, версию и имя клиентского программного обеспечения. Все эти параметры указываются в заголовке HTTP-запроса. Тело в запрос не прошло.
В ответ сервер сообщает версию протокола HTTP, код возврата, тип содержимого тела сообщения, размер тела сообщения и ряд других необязательных директив в заголовке HTTP. Сам ресурс, обычно HTML-страница, передается в теле ответа.
Метод HEAD
Метод HEAD используется для минимизации обменов при работе по протоколу HTTP. Он похож на метод GET, за исключением того, что в ответе не отправляется тело сообщения. Этот метод используется для проверки времени последнего изменения ресурса, чтобы проверить дату истечения срока действия кэшированных ресурсов при использовании сканеров ресурсов World Wide Web. Короче говоря, метод HEAD предназначен для минимизации количества информации, передаваемой по сети как часть обмена HTTP.
Метод POST
Метод POST является альтернативой методу GET. При обмене данными с использованием метода POST клиентский запрос содержит тело сообщения HTTP. Это тело может состоять из данных, введенных в HTML-форму или прикрепленный внешний файл. Ответ обычно содержит как заголовок, так и тело HTTP-сообщения. Чтобы инициировать обмен с использованием метода POST, значение «post» должно быть указано в атрибуте метода контейнера модуля».
Метод PUT
Метод PUT используется для публикации HTML-страниц в каталоге HTTP-сервера. При передаче данных от клиента на сервер сообщение содержит как заголовок сообщения, который содержит URL-адрес этого ресурса, так и тело, которое является содержимым размещенного ресурса.
Ответ обычно не передает тело ресурса, а заголовок сообщения содержит код возврата, который определяет, был ли выделен ресурс.
URL — уникальное положение ресурса
Важную роль в работе web и http играет URL (Uniform Resource Locator) — уникальное расположение ресурса, по-русски его часто называют ссылкой. Это уникальный адрес веб-страницы в Интернете.
Давайте посмотрим, как работают ссылки. Например, https://www.zvondozvon.ru/tehnologii/protokoli. Сначала идет название протокола, в нашем случае https. Итак: // и здесь можно найти доменное имя сервера www.zvondozvon.ru, на котором расположена страница, или IP-адрес сервера. Далее косая черта указывает имя конкретной страницы, которую мы хотим загрузить / tehnologii / protokoli.
URL-адреса предназначены не только для работы с http и html, но и, например, с другими протоколами, вы можете указать защищенный протокол https или протокол ftp. Кроме того, нет необходимости использовать гипертекст, веб-серверы могут размещать страницы с обычным текстом.
Место протокола HTTP в стеке протоколов TCP/IP
Протоколы HTTP находятся на прикладном уровне в стеке протоколов TCP / IP .
Используя протокол транспортного уровня TCP, веб-сервер работает на порту 80, поскольку номер порта клиента автоматически генерируется операционной системой. HTTP работает в режиме запрос-ответ. Клиент отправляет серверу запрос на отправку веб-страницы, а сервер отправляет веб-страницу в ответ.
В отличие от других протоколов, обсуждаемых ранее на сайте в разделе «Протоколы в HTTP», здесь нет жестко заданного формата пакетов, используется обычный текстовый режим.
Итог
Вот как это работает, обзор основ протокола HTTP. Во второй части будет еще больше интересных фактов и примеров.
Этот урок подготовлен для вас командой ruseller.com
Источник руководства: http://net.tutsplus.com/tutorials/tools-and-tips/http-the-protocol-every-web-developer-must-know-part-1/
Перевод Станислава Протасевича
Урок создан: 13 мая 2013 г
Просмотры: 174515
Правила перепечатки
Оптимизация обмена
Протокол HTTP изначально разрабатывался как протокол, ориентированный на непостоянное соединение. Это означает, что как только сервер принял запрос клиента и ответил на него, соединение между клиентом и сервером теряется. Для нового обмена данными необходимо установить новое соединение. У этого подхода есть как достоинства, так и недостатки.
К преимуществам относится возможность одновременного обслуживания большого количества коротких запросов. Даже на самых популярных серверах количество открытых подключений не может превышать сотни при выполнении порядка миллиона запросов в день. При этом клиент может одновременно открывать до 40 подключений, которые с точки зрения сервера являются одинаковыми. Благодаря высокоскоростным линиям связи это позволяет быстро реагировать на запросы клиентов для всей страницы (текст, графика и т.д.).
К недостаткам этой схемы обмена можно отнести: необходимость устанавливать соединение для каждого обмена и невозможность поддерживать сеанс работы с информационным ресурсом. Когда вы инициализируете соединение с использованием транспортного протокола TCP и разрываете это соединение, необходимо передать довольно большой объем информации о службе. Отсутствие поддержки сеансов HTTP значительно усложняет работу с такими ресурсами, как базы данных или ресурсы, требующие аутентификации.
Для оптимизации количества открытых TCP-соединений в версиях 1.0 и 1.1 протокола HTTP предусмотрен режим keep-alive. В этом режиме соединение инициализируется только один раз, и на нем могут быть последовательно реализованы несколько HTTP-обменов.
Файлы cookie были добавлены в директивы заголовка HTTP для поддержки сеансов. Они позволяют имитировать поддержку соединения при работе по протоколу HTTP.
Кодировка GET и POST-запросов.
Есть два типа кодирования HTTP-запроса. Основной из них — urlencoded, который является стандартной кодировкой URL. Пробел представлен как% 20, русские буквы и большинство специальных символов закодированы, английские буквы и дефисы оставлены как есть.
Как данные формы должны кодироваться при отправке, указывается в его теге HTML:
Версии протокола HTTP
Существует несколько версий протокола HTTP. Первая экспериментальная версия HTTP 0.9 была разработана в ЦЕРНе в 1991 году. Первая официальная версия HTTP 1.0 была принята в качестве стандарта в 1996 году, а расширенная версия протокола HTTP 1.1 была принята почти сразу после этого в 1997 году который до сих пор используется. В 2015 году появилась новая версия протокола HTTP 2; сейчас эта версия находится только в стадии эксплуатации, она еще не поддерживается всеми браузерами и не всеми веб-серверами.
Формат ответа
Формат ответа отличается только статусом и количеством заголовков. Статус выглядит так:
Строка состояния = HTTP-версия SP Код состояния SP Причина Предложение CRLF
- Версия HTTP
- Код состояния
- Сообщение о статусе в удобочитаемом виде
Обычное состояние выглядит так:
HTTP / 1.1 200 ОК
Заголовки ответа могут быть следующими:
header-response = Допустимые диапазоны | Возраст | ETag | Расположение | Прокси-аутентификация | Повторите попытку позже | Сервер | Варьируется | WWW аутентификация
- Возраст — это время в секундах, в течение которого сообщение было создано на сервере.
- Сущность MD5 ETag для проверки изменений и изменений в ответ.
- Местоположение используется для перенаправления и содержит новый URL-адрес.
- Сервер идентифицирует сервер, на котором был сгенерирован ответ.
Думаю, на сегодня достаточно теории. Теперь давайте посмотрим на инструменты, которые мы можем использовать для отслеживания HTTP-сообщений.
Библиотеки для работы с HTTP — jQuery AJAX
Поскольку jQuery настолько популярен, в нем также есть инструментарий для обработки HTTP-ответов на запросы AJAX. Вы можете найти информацию о jQuery.ajax (настройки) на официальном сайте.
Передав объект настроек, а также используя функцию обратного вызова beforeSend, мы можем установить заголовки запроса с помощью метода setRequestHeader().
$ .ajax ({url: ‘http://www.articles.com/latest’, тип: ‘GET’, beforeSend: function (jqXHR) {jqXHR.setRequestHeader (‘Accepts-Language’, ‘en-US, en’); } });
вы можете прочитать объект jqXHR, используя метод jqXHR.getResponseHeader().
Если вы хотите обработать статус запроса, вы можете сделать это так:
$ .ajax ({код состояния: {404: функция () {предупреждение («страница не найдена»); } } });
Структура пакета HTTP
Пакет HTTP состоит из 3 частей. Первая часть — это запрос либо со стороны клиента, либо из статуса ответа со стороны сервера. Например, запрос GET означает, что клиент просит отправить ему веб-страницу, расположенную на сервере по этому пути GET / tehnologii / protokoli в ответ, сервер отправляет статус операции, код и символическое сообщение, например, 200 ОК. Это означает, что страница была найдена на сервере и сервер отправляет ее в теле сообщения.
Так что могут быть названия, которых может быть несколько. В версии HTTP 1.0 заголовки были необязательными, но в версии HTTP 1.1 обязательно использовать в запросе заголовок Host: www.zvondozvon.ru, который указывает доменное имя сервера, с которого вы хотите запросить страница в Интернете. Это связано с тем, что разные веб-сайты могут работать на одном IP-адресе, и веб-серверу необходимо знать, с какого сайта вы хотите загрузить страницу.
Также могут быть другие заголовки, такие как тип сообщения, переданного в примере Content-Type: text / html; charset = UTF-8, размер отправляемого сообщения Content-Length: 5161 байт.
Затем может идти тело сообщения, в котором передается запрошенная веб-страница или некоторые параметры передаются на сервер. Тело сообщения необязательно, например, в запросе клиента на передачу веб-страницы с сервера тело не требуется.
Инструменты для определения HTTP трафика
Есть много инструментов для мониторинга HTTP-трафика. Вот некоторые из них:
Чаще всего используются инструменты разработчика Chrome:
Что касается отладчика, вы можете использовать Fiddler:
Для мониторинга HTTP-трафика вам понадобятся curl, tcpdump и tshark.
Формат запроса
Запрос выглядит так:
Строка запроса = SP URI SP Метод версии HTTP CRLF Method = «OPTIONS» | «ГОЛОВА» | «ПОЛУЧИТЬ» | «ПОЧТА» | «ПУТ» | «УДАЛИТЬ» | «СЛЕД»
SP — это разделитель между токенами. Версия HTTP указывается в версии HTTP. Реальный запрос выглядит так:
GET / article / http-basics HTTP / 1.1 Хост: www.articles.com Соединение: keep-alive Cache-Control: no-cache Pragma: no-cache Принять: text / html, application / xhtml + xml, application / xml; q = 0,9, * / *; q = 0,8
Список возможных заголовков запроса:
заголовок-запрос = Принять | Accept-Charset | Акцепт-кодирование | Accept-Language | Авторизация | Ожидайте | От | Гость | Если совпадение | Если изменено пользователем | Если-нет-совпадение | Se-Range | Если-Не изменено-Автором | Макс-Форвард | Прокси-авторизация | Диапазон | Контактное лицо | ВЫ | Пользовательский агент
Заголовок Accept определяет поддерживаемые типы MIME, язык и кодировку символов. Заголовки From, Host, Referer и User-Agent содержат информацию о клиенте. Префиксы If- используются для создания условий. Если условие не выполнено, возникнет ошибка 304 Not Modified.
Коды состояния
В ответ на запрос от клиента сервер отправляет ответ, который, помимо прочего, содержит код состояния. Этот код имеет особое значение, чтобы клиент мог более четко понять, как интерпретировать ответ:
1xx: информационные сообщения
Набор этих кодов был введен в HTTP / 1.1. Сервер может отправить запрос типа: Expect: 100-continue, что означает, что клиент все еще отправляет остальную часть запроса. Клиенты HTTP / 1.0 игнорируют эти заголовки.
2xx: сообщения об успехе
Если клиент получил код из серии 2xx, запрос был успешным. Самый распространенный вариант — 200 ОК. Когда делается запрос GET, сервер отправляет ответ в теле сообщения. Есть и другие возможные ответы:
- 202 Accepted — запрос был принят, но может не содержать ресурса в ответе. Это полезно для асинхронных запросов на стороне сервера. Сервер определяет, следует ли отправлять ресурс.
- 204 Нет содержимого: в теле ответа нет сообщения.
- 205 Сброс содержимого — указывает серверу сбросить отображение документа.
- 206 Частичное содержание: ответ содержит только часть содержания. Дополнительные заголовки определяют общую длину содержимого и другую информацию.
3xx: перенаправление
Своеобразное сообщение покупателю о необходимости совершить другое действие. Наиболее распространенный вариант использования — перенаправить клиента на другой адрес.
- 301 перемещен навсегда: ресурс теперь можно найти по другому URL-адресу.
- 303 Подробнее: ресурс может быть временно найден по другому URL-адресу. Заголовок Location содержит временный URL.
- 304 Not Modified: сервер определяет, что ресурс не был изменен, и клиент должен использовать кэшированную версию ответа. Для проверки подлинности информации используется ETag (хеш Entity — Entity Tag);
4xx: ошибки клиента
Этот класс сообщений используется сервером, если он определяет, что запрос был отправлен с ошибкой. Самый распространенный код — 404 Not Found. Это означает, что ресурс не был найден на сервере. Другие возможные коды:
- 400 Bad Request: вопрос сформулирован неправильно.
- 401 Unauthorized: для запроса требуется аутентификация. Информация передается через заголовок авторизации.
- 403 Запрещено: сервер не открыл доступ к ресурсу.
- 405 Метод запрещен: для доступа к ресурсу использовался недопустимый метод HTTP.
- 409 Конфликт: сервер не может обработать запрос до конца, потому что он пытается изменить более новую версию ресурса. Это часто происходит с запросами PUT.
5xx: ошибки сервера
Набор кодов, используемых для идентификации ошибки сервера при обработке запроса. Наиболее частая: внутренняя ошибка сервера 500. Другие варианты:
- 501 Не реализовано: сервер не поддерживает запрошенные функции.
- 503 Service Unavailable: это может произойти, если на сервере произошла ошибка или он перегружен. Обычно в этом случае сервер не отвечает, и время, отведенное для ответа, истекает.
Методы HTML
Когда клиент обращается к серверу в запросе, он указывает метод, который он хочет использовать.
- Самые популярные методы — это GET-запрос на передачу веб-страницы, этот запрос используется чаще всего.
- POST-передача данных на веб-сервер для обработки. Метод post используется, например, при написании комментариев к видео на YouTube, другие методы, кроме get и post, используются гораздо реже.
- Метод HEAD требует заголовка страницы, так же, как GET без тела сообщения, хотя HTTP был разработан для передачи веб-страниц, создатели HTTP сделали возможным его использование для работы с другими типами ресурсов.
- Метод PUT помещает ресурс на веб-сервер.
- УДАЛИТЬ Чтобы удалить страницу или ресурс с веб-сервера, у вас должны быть соответствующие права доступа для выполнения этих методов.
- Метод TRACE позволяет отслеживать, что происходит со страницей, кто вносит изменения.
- Метод OPTIONS позволяет узнать, какие методы поддерживаются для конкретного ресурса на веб-сервере.
- Метод CONNECT позволяет подключаться к веб-серверу через прокси.
Статусы HTTP
В ответе сервера первое поле — это статус обработки запроса, статусы сгруппированы в пять групп, и для каждой группы используется трехзначный код статуса.
- Состояния, начинающиеся с единицы (1XX), используются для передачи информационных сообщений.
- Состояния, начинающиеся с двух (2XX), указывают, что запрос был успешным, например, наиболее популярное состояние (200 OK) указывает, что страница была найдена и передается клиенту.
- Состояния, начинающиеся с трех (3XX), указывают на перенаправление, например, статус 301 — постоянное перенаправление указывает, что страница была перемещена на другой адрес, и все последующие запросы должны быть отправлены на этот новый адрес. Статус 307 также говорит о перенаправлении, но временном, теперь вы можете получить доступ к странице по другому адресу, но через некоторое время вам нужно снова обратиться к исходному адресу.
- Состояния, начинающиеся с четверки (4XX), что указывает на то, что произошла какая-то ошибка на стороне клиента. Наиболее частая ошибка — 404: страница, запрошенная клиентом, не найдена на сервере. Также возможно, что из-за ошибки 403 отказано в доступе к ресурсу, запрошенному клиентом, и другие ошибки.
- Состояния, начинающиеся с пяти (5XX), указывают на ошибку на стороне сервера, например 500, внутреннюю ошибку сервера.