HTTP: различия между версиями
PopovaED (обсуждение | вклад) (Добавление информации про безопасность и HTTPS) |
|||
(не показаны 3 промежуточные версии 2 участников) | |||
Строка 34: | Строка 34: | ||
3. Тело запроса (Request Body), текст сообщения — данные, которые передаются. Например, файлы, отправляемые на сервер. | 3. Тело запроса (Request Body), текст сообщения — данные, которые передаются. Например, файлы, отправляемые на сервер. | ||
[[Файл:Http.png|мини]] | [[Файл:Http.png|мини]] | ||
=== Чем можно управлять через протокол HTTP === | |||
HTTP позволяет не только получать и передавать данные, но и управлять поведением сайта. Например, с помощью заголовков и тела сообщения можно управлять: | |||
● Кэшем. Сервер расскажет, что и как долго кэшировать на стороне клиента. Так браузер клиента поймёт, какие элементы сайта нужно положить в кэш для будущего переиспользования. | |||
● Аутентификацией. В заголовке HTTP можно настраивать специальные сессии и куки для быстрого входа по логину и паролю. Именно благодаря этому можно заходить на сайты, не вводя повторно логин и пароль. | |||
● Сессиями. Текст HTTP-запроса позволяет серверу запомнить состояние сайта на стороне клиента. Например, чтобы сохранить его корзину или какие-то введённые данные даже при обновлении страницы. | |||
=== Тело сообщения === | |||
Тело HTTP-сообщения (<code>message-body</code>), если оно присутствует, используется для передачи тела объекта, связанного с запросом или ответом. Тело сообщения отличается от тела объекта (<code>entity-body</code>) только в том случае, когда применяется кодирование передачи, что указывается полем заголовка <code>Transfer-Encoding</code>. | |||
message-body = entity-body | |||
| <entity-body закодировано согласно | |||
Transfer-Encoding> | |||
Поле <code>Transfer-Encoding</code> должно использоваться для указания любого кодирования передачи, применённого приложением в целях гарантирования безопасной и правильной передачи сообщения. Поле <code>Transfer-Encoding</code> — это свойство сообщения, а не объекта, и, таким образом, может быть добавлено или удалено любым приложением в цепочке запросов/ответов. | |||
Правила, устанавливающие допустимость тела сообщения в сообщении, отличны для запросов и ответов. | |||
Присутствие тела сообщения в запросе отмечается добавлением к заголовкам запроса поля заголовка <code>Content-Length</code> или <code>Transfer-Encoding</code>. Тело сообщения может быть добавлено в запрос, только когда метод запроса допускает тело объекта. | |||
Включается или не включается тело сообщения в сообщение ответа — зависит как от метода запроса, так и от кода состояния ответа. Все ответы на запрос с методом <code>HEAD</code> не должны включать тело сообщения, даже если присутствуют поля заголовка объекта (<code>entity-header</code>), заставляющие поверить в присутствие объекта. Никакие ответы с кодами состояния <code>1xx</code> (Информационные), <code>204</code> (Нет содержимого, No Content), и <code>304</code> (Не модифицирован, Not Modified) не должны содержать тела сообщения. Все другие ответы содержат тело сообщения, даже если оно имеет нулевую длину. | |||
== Безопасность и HTTPS == | |||
==== HTTPS: Защита передаваемых данных ==== | |||
HTTPS (Hyper Text Transfer Protocol Secure) является защищенной версией протокола HTTP, обеспечивающей шифрование данных между клиентом и сервером. Важность его использования в HTTP-соединениях заключается в следующем: | |||
*Шифрование данных: HTTPS использует шифрование для защиты передаваемой информации, что делает её невозможной для прочтения третьим лицам. | |||
*Идентификация сервера: HTTPS подтверждает, что сервер, с которым происходит обмен данными, является действительным сервером. | |||
-*Целостность данных: Проверка целостности данных гарантирует, что информация не была изменена в процессе передачи. | |||
==== Типы атак и меры безопасности ==== | |||
Различные виды атак, такие как межсетевые атаки, переполнение буфера, междоменная подделка запроса (CSRF), инъекции и др., могут угрожать безопасности HTTP-соединений. Некоторые меры безопасности для защиты от этих атак включают: | |||
*Шифрование: Защита данных путём их кодирования, что делает их непонятными для несанкционированных лиц. | |||
*Аутентификация: Проверка подлинности пользователей или серверов для предотвращения несанкционированного доступа. | |||
*Авторизация: Управление доступом к ресурсам после успешной аутентификации. | |||
*Использование HTTPS: Миграция на HTTPS для обеспечения шифрования и безопасности данных. | |||
*Протоколы обмена ключами: Применение протоколов, таких как TLS/SSL, для установки безопасного соединения между клиентом и сервером. | |||
Все эти меры помогают обеспечить безопасность передаваемых данных и снизить риск возможных атак на HTTP-соединения. |
Текущая версия на 03:30, 20 декабря 2023
Описание | HTTP является основой обмена данными для Всемирной паутины. Это независимый от языка программирования протокол, предназначенный для обмена документами (также называемыми ресурсами) между приложениями через интернет. Протокол HTTP используется широким спектром приложений, наиболее известными из которых являются веб-браузеры. |
---|---|
Область знаний | NetSci, Информатика, Робототехника, Управление |
Авторы | |
Поясняющее видео | |
Близкие понятия | HTML, WWW, JSON, REST, API |
Среды и средства для освоения понятия | MediaWiki API |
Веб-браузер использует протокол HTTP для связи с веб-сервером, на котором размещен сайт. Когда вы набираете URL-адрес в адресной строке браузера, он отправляет HTTP-запрос GET /about на сервер, где находится apihandyman.io, так же как когда потребитель API отправляет запрос на сервер REST API. Ответ, отправленный сервером, содержит код состояния 200 OK, за которым следует HTML-страница, соответствующая URL-адресу.
История
HTTP появился изначально для передачи размеченного гипертекста, что для программных интерфейсов подходит слабо. HTML быстро эволюционировал в более строгий и машиночитаемый XML, который быстро стал одним из общепринятых форматов описания вызовов API. С начала 2000-х XML начал вытесняться более простым и интероперабельным JSON, и сегодня говоря о HTTP API, чаще всего имеют в виду такие интерфейсы, в которых данные передаются в формате JSON по протоколу HTTP.
Методы
Методы HTTP состоят из запросов:
- GET
- POST;
- PUT
- DELETE
HTTP-запрос
HTTP-запрос представляет собой
- применение определённого глагола к URL с
- указанием версии протокола,
- передачей дополнительной мета-информации в заголовках и, возможно,
- каких-то данных в теле запроса:
POST /v1/orders HTTP/1.1 Host: our-api-host.tld Content-Type: application/json
Структура HTTP-сообщения
1. Стартовая строка, в которой определяется адрес, по которому отправляется запрос, и тип сообщения. Указывается метод, который определяет действия при получении этого сообщения. Это может быть чтение данных, их отправка, изменение или удаление.
2. Заголовки (Headers), в которых прописаны определённые параметры сообщения. Например, может быть напрямую задан язык.
3. Тело запроса (Request Body), текст сообщения — данные, которые передаются. Например, файлы, отправляемые на сервер.
Чем можно управлять через протокол HTTP
HTTP позволяет не только получать и передавать данные, но и управлять поведением сайта. Например, с помощью заголовков и тела сообщения можно управлять:
● Кэшем. Сервер расскажет, что и как долго кэшировать на стороне клиента. Так браузер клиента поймёт, какие элементы сайта нужно положить в кэш для будущего переиспользования.
● Аутентификацией. В заголовке HTTP можно настраивать специальные сессии и куки для быстрого входа по логину и паролю. Именно благодаря этому можно заходить на сайты, не вводя повторно логин и пароль.
● Сессиями. Текст HTTP-запроса позволяет серверу запомнить состояние сайта на стороне клиента. Например, чтобы сохранить его корзину или какие-то введённые данные даже при обновлении страницы.
Тело сообщения
Тело HTTP-сообщения (message-body
), если оно присутствует, используется для передачи тела объекта, связанного с запросом или ответом. Тело сообщения отличается от тела объекта (entity-body
) только в том случае, когда применяется кодирование передачи, что указывается полем заголовка Transfer-Encoding
.
message-body = entity-body | <entity-body закодировано согласно Transfer-Encoding>
Поле Transfer-Encoding
должно использоваться для указания любого кодирования передачи, применённого приложением в целях гарантирования безопасной и правильной передачи сообщения. Поле Transfer-Encoding
— это свойство сообщения, а не объекта, и, таким образом, может быть добавлено или удалено любым приложением в цепочке запросов/ответов.
Правила, устанавливающие допустимость тела сообщения в сообщении, отличны для запросов и ответов.
Присутствие тела сообщения в запросе отмечается добавлением к заголовкам запроса поля заголовка Content-Length
или Transfer-Encoding
. Тело сообщения может быть добавлено в запрос, только когда метод запроса допускает тело объекта.
Включается или не включается тело сообщения в сообщение ответа — зависит как от метода запроса, так и от кода состояния ответа. Все ответы на запрос с методом HEAD
не должны включать тело сообщения, даже если присутствуют поля заголовка объекта (entity-header
), заставляющие поверить в присутствие объекта. Никакие ответы с кодами состояния 1xx
(Информационные), 204
(Нет содержимого, No Content), и 304
(Не модифицирован, Not Modified) не должны содержать тела сообщения. Все другие ответы содержат тело сообщения, даже если оно имеет нулевую длину.
Безопасность и HTTPS
HTTPS: Защита передаваемых данных
HTTPS (Hyper Text Transfer Protocol Secure) является защищенной версией протокола HTTP, обеспечивающей шифрование данных между клиентом и сервером. Важность его использования в HTTP-соединениях заключается в следующем:
- Шифрование данных: HTTPS использует шифрование для защиты передаваемой информации, что делает её невозможной для прочтения третьим лицам.
- Идентификация сервера: HTTPS подтверждает, что сервер, с которым происходит обмен данными, является действительным сервером.
-*Целостность данных: Проверка целостности данных гарантирует, что информация не была изменена в процессе передачи.
Типы атак и меры безопасности
Различные виды атак, такие как межсетевые атаки, переполнение буфера, междоменная подделка запроса (CSRF), инъекции и др., могут угрожать безопасности HTTP-соединений. Некоторые меры безопасности для защиты от этих атак включают:
- Шифрование: Защита данных путём их кодирования, что делает их непонятными для несанкционированных лиц.
- Аутентификация: Проверка подлинности пользователей или серверов для предотвращения несанкционированного доступа.
- Авторизация: Управление доступом к ресурсам после успешной аутентификации.
- Использование HTTPS: Миграция на HTTPS для обеспечения шифрования и безопасности данных.
- Протоколы обмена ключами: Применение протоколов, таких как TLS/SSL, для установки безопасного соединения между клиентом и сервером.
Все эти меры помогают обеспечить безопасность передаваемых данных и снизить риск возможных атак на HTTP-соединения.