29
Протокол HTTP 1

Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet API

Embed Size (px)

Citation preview

Page 1: Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet API

1

Протокол HTTP

Page 2: Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet API

2

Основные сведения

HTTP — широко распространённый протокол передачи данных, изначально предназначенный для передачи гипертекстовых документов.

Протокол HTTP предполагает использование клиент-серверной структуры передачи данных.

Как правило, передача данных по протоколу HTTP осуществляется через TCP/IP-соединения и обычно использует TCP-порт 80.

Page 3: Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet API

3

Структура протокола

Стартовая строка — определяет тип сообщения.

Заголовки — характеризуют тело сообщения, параметры передачи и прочие сведения.

Тело сообщения — непосредственно данные сообщения. Обязательно должно отделяться от заголовков пустой строкой.

Page 4: Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet API

4

Стартовая строка запроса

Метод URI HTTP/Версия

Page 5: Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet API

5

Метод

Последовательность из любых символов, кроме управляющих и разделителей, и определяет операцию, которую нужно осуществить с указанным ресурсом.

GET: получить доступ к существующему ресурсу. В URL перечислена вся необходимая информация, чтобы сервер смог найти и вернуть в качестве ответа искомый ресурс.

POST: используется для создания нового ресурса. POST запрос обычно содержит в себе всю нужную информацию для создания нового ресурса.

PUT: обновить текущий ресурс. PUT запрос содержит обновляемые данные.

DELETE: служит для удаления существующего ресурса.

Page 6: Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet API

6

URI

 Определяет путь к запрашиваемому документу.

Page 7: Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet API

7

Версия

Определяет, в соответствии с какой версией стандарта HTTP составлен запрос. Указывается как два числа, разделённых точкой.

Page 8: Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet API

8

Заголовки запроса

Строка в HTTP-сообщении, содержащая разделённую двоеточием пару вида «параметр-значение».

Page 9: Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet API

9

Группы заголовков

General Headers — должны включаться в любое сообщение клиента и сервера.

Request Headers — используются только в запросах клиента.

Response Headers — присутствуют только в ответах сервера.

Entity Headers — сопровождают каждую сущность сообщения.

Page 10: Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet API

10

Тело сообщения

Сами данные, которые передаются в запросе. 

Все ответы содержат тело сообщения, возможно нулевой длины, кроме ответов на запрос методом HEAD и ответов с кодами статуса 1xx, 204 (No Content), и 304 (Not Modified).

Page 11: Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet API

11

Стартовая строка ответа

HTTP/ВерсияКод состояния Пояснение

Page 12: Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet API

12

Коды состояния

Три цифры, которые определяют результат совершения запроса.

1xx: Информационные сообщения2xx: Сообщения об успехе3xx: Перенаправление4xx: Клиентские ошибки5xx: Ошибки сервера

Page 13: Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet API

13

Пояснение

Текстовое пояснение к коду ответа, предназначено для упрощения чтения ответа человеком

Page 14: Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet API

14

Заголовки ответа

Page 15: Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet API

15

Кэширование

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

Page 16: Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet API

16

HTTP заголовки для клиентского кэширования

Заголовок ответа Last-modified и заголовок запроса if-Modified-Since.

Заголовок ответа Etag и заголовок запроса If-None-Match.

HTTP-заголовок Expired.HTTP-заголовки Cache-Control

max-age=[секунды] s-maxage=[секунды] no-cache no-store public private

Page 17: Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet API

17

Советы

Используйте URL-адреса последовательно.Используйте общую библиотеку

изображений.Храните в кэше изображения и страницы,

которые редко изменяются.Дайте кэшу возможность распознавать

страницы, которые обновляются регулярно.

Page 18: Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet API

18

Клиент-серверная модель взаимодействия

Page 19: Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet API

19

Основные понятия

Задача клиентской-части (программы-клиента) состоит во взаимодействии с пользователем, передаче пользовательского запроса серверу, получение запроса от серверной части (программы-сервера) и представление его в удобном для пользователя виде.

Программа-сервер же обрабатывает запросы клиента и выдает ответы. 

Page 20: Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet API

20

Разновидности архитектуры клиент-сервер

«Архитектура с толстым клиентом» - логика представления данных и бизнес-логика размещаются на клиенте, логикой хранения и накопления данных на сервере.

«Архитектура с тонким клиентом» - программа-клиент реализует лишь графический интерфейс пользователя и передает/принимает запросы, а вся бизнес-логика выполняется сервером.

Page 21: Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet API

21

Взаимодействие клиента и сервера

Для идентификации машины в сети используется протокол IP и 4х байтный уникальный идентификатор машины - ip адрес. Далее, для идентификации приложения, TCP добавляет понятие порта.

В TCP пакетах указываются порт источника (клиента) и порт назначения (сервера).

Page 22: Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet API

22

Клиент-серверные технологии

Web-серверы - представляют доступ к гипертекстовым документам по протоколу HTTP, поддерживают расширенные возможности, в частности работу с бинарными файлами (изображения, мультимедиа и т.п.).

Серверы приложений - для централизованного решения прикладных задач в некоторой предметной области.

Серверы баз данных - используются для обработки пользовательских запросов на языке SQL. При этом СУБД находится на сервере, к которому и подключаются клиентские приложения.

Почтовые серверы - представляют услуги по отправке и получению электронных почтовых сообщений.

Page 23: Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet API

23

Servlet API

Page 24: Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet API

24

Общие сведения

Сервлеты - это программы на Java, которые работают на серверном компьютере. Их выполнение инициируется Web-сервером или сервером приложений по запросу клиента.

Пакеты javax.servlet и javax.servlet.http обеспечивают интерфейсы и классы для создания сервлетов.

Page 25: Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet API

25

Последовательность выполнения сервлета

Клиент посылает запрос Web-серверу или серверу приложений.

Web-сервер или сервер приложений инициирует выполнение сервлета, передавая ему необходимые данные.

Сервлет выполняется (как правило, на виртуальной Java-машине сервера), и по окончании работы передает результаты (ответ на исходный запрос) вызвавшему его серверу. Обмен данными между сервлетом и сервером происходит при помощи специального Java-API (его главные составляющие это классы HttpServletRequest для передачи запроса и HttpServletResponse для ответа).

Сервер отдает полученные от сервлета данные клиенту.

Page 26: Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet API

26

Жизненный цикл сервлета

Загрузка класса сервлета — когда контейнер получает запрос для сервлета, то происходит загрузка класса сервлета в память и вызов конструктора без параметров.

Инициализация класса сервлета — после того как класс загружен контейнер инициализирует объект ServletContext для этого сервлета и внедряет его через init() метод. Это и есть место где сервлет класс преобразуется из обычного класса в сервлет.

Обработка запросов — после инициализации сервлет готов к обработке запросов.

Удаление из Service — когда контейнер останавливается или останавливается приложение, то контейнер сервлетов уничтожает классы сервлетов путем вызова destroy() метода.

Page 27: Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet API

27

ServletConfig и ServletContext

Интерфейс javax.servlet.ServletConfig используется для передачи конфигурационной информации сервлету.

Интерфейс javax.servlet.ServletContext предоставляет доступ к параметрам веб приложения сервлету.

ServletConfig является уникальным объектом для каждого сервлета, в то время как ServletContext уникальный для всего приложения.

ServletConfig используется для предоставления параметров инициализации сервлету, а ServletContext для предоставления параметров инициализации приложения для всех сервлетов.

Нет возможности устанавливать атрибуты в объекте ServletConfig, в то время как можно установить атрибуты в объекте ServletContext, которые будут доступны другим сервлетам.

Page 28: Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet API

28

Отличия методов forward() и sendRedirect()

RequestDispatcher forward() используется для проброски того же самого запроса к другому ресурсу, в то время как ServletResponse sendRedirect() возвращает ответ клиенту с status code 302 (redirect) с ссылкой для отправки запроса. Посылается полностью новый запрос.

forward() обрабатывается внутри контейнера, а sendRedirect() обрабатывается браузером.

Необходимо использовать forward() для организации доступа внутри одного и того же приложения, т.к. он быстрее sendRedirect().

В методе forward() браузер не знает о фактически обрабатываемом ресурсе и URL в строке остается прежним. В sendRedirect() методе URL адрес изменяется на пробрасываемый ресурс.

Page 29: Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet API

29

Спасибо за внимание!