Протокол HTTP
Почти все, что мы делали до сих пор, опиралось на протокол HTTP. Протокол HTTP
— это протокол, который браузеры и серверы используют для обмена данными. Он
определяет восемь отдельных методов запроса, из которых наиболее широко
используются GET и POST. У каждого метода запроса есть набор ограничений и
рекомендаций по содержимому сообщения и по тому, как сообщение должно
обрабатываться сервером. Например,
протокол HTTP
содержит следующую рекомендацию по обработке обычных GET-запросов, то есть
тех, которые пользователи используют для получения данных.
В частности, установлено соглашение, что методы GET и HEAD SHOULD NOT иметь значение выполнения действия, отличного от получения. Эти методы следует считать "safe". Это позволяет пользовательским агентам представлять другие методы, такие как POST, PUT и DELETE, особым образом, чтобы пользователь был осведомлен о том, что запрашивается потенциально небезопасное действие.
Данные получают с помощью метода GET
Метод GET используется для получения данных. Когда вы вводите адрес в поле ввода браузера и нажимаете Enter, браузер выполняет GET-запрос. Дополнительные параметры не требуются. В протоколе, если предположить, что мы используем HTTP/1.1, также нужно отправить информацию о хост-машине; это необходимо, чтобы каждый сервер мог обслуживать несколько доменов.
GET /page.html HTTP/1.1
Host: f-secure.com
Любые параметры, переданные серверу, являются частью URL, например
http://localhost:8000/greet?user=ada. Следовательно, эти параметры будут
показаны в адресной строке браузера.
Данные отправляют с помощью метода POST
Практическая разница между POST- и GET-запросами состоит в том, что методы GET могут содержать информацию в пути и параметрах запроса, а в тело метода POST можно добавить содержимое. Тип данных в теле отправляется как часть заголовка запроса, и это могут быть изображения, видео, музыка и т. д.
POST /page.html HTTP/1.1
Host: f-secure.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 10
...data...В отличие от GET, параметры не показываются в URL браузера (к тому же нет смысла показывать их, поскольку параметрами могут быть, например, изображения). Кроме того, современный браузер спросит, хотите ли вы повторно отправить форму, если вы попробуете перезагрузить веб-страницу, полученную с помощью метода POST: это признак того, что POST следует считать тем, что изменяет данные на сервере, тогда как GET просто запрашивает сервер.
HTTP не хранит состояние
HTTP — протокол без состояния, что означает, что каждый запрос, отправляемый на сервер, обрабатывается отдельно, и с точки зрения сервера запросы не связаны друг с другом. Это проектное решение было принято, чтобы упростить получение содержимого с нескольких серверов и повысить производительность протокола HTTP (базовый HTTP в определении 1992 года). Изначально это решение было оправданным, поскольку большая часть веб-трафика была связана с передачей статического содержимого.
Однако идентификация пользователей необходима. Например, интернет-магазины и другие сервисы, которые идентифицируют пользователей, требуют средств для сохранения сведений о пользователе. Классический, но довольно плохой способ сохранять сведения о пользователе заключался в использовании параметров GET-запроса, которые могли идентифицировать пользователя. Однако это не рекомендуется, поскольку такие параметры также можно изменить или подделать.
Сейчас многие веб-приложения включают поль зовательскую функциональность, которая ожидает, что пользователей можно идентифицировать. Здесь полезны cookies, которые были введены в протоколе HTTP/1.1. Когда сервер добавляет cookie в ответ, который отправляет пользователю, браузер пользователя всегда отправляет этот cookie обратно серверу. Так можно поддерживать сессии между несколькими запросами.
В этой части курса по защите программного обеспечения мы кратко рассмотрели функциональность фронтенда и бэкенда, а также то, как базы данных используются при разработке веб-приложений. На следующей неделе мы глубже рассмотрим типичные проблемы безопасности в веб-приложениях.
Не забудьте проверить свои баллы в индикаторе в правом нижнем углу материала!