HTTP: различия между версиями

Материал из Поле цифровой дидактики
(Добавление информации про безопасность и HTTPS)
 
(не показано 7 промежуточных версий 3 участников)
Строка 3: Строка 3:
|Field_of_knowledge=NetSci, Информатика, Робототехника, Управление
|Field_of_knowledge=NetSci, Информатика, Робототехника, Управление
|similar_concepts=HTML, WWW, JSON, REST, API
|similar_concepts=HTML, WWW, JSON, REST, API
|Environment=MediaWiki API
}}
}}
Веб-браузер использует протокол HTTP для связи с веб-сервером, на котором размещен сайт. Когда вы набираете [[URL]]-адрес  в адресной строке браузера, он отправляет HTTP-запрос GET /about на сервер, где находится apihandyman.io, так же как когда потребитель [[API]] отправляет запрос на сервер [[REST]] API. Ответ, отправленный сервером, содержит код состояния 200 OK, за которым следует [[HTML]]-страница, соответствующая [[URL]]-адресу.
Веб-браузер использует протокол HTTP для связи с веб-сервером, на котором размещен сайт. Когда вы набираете [[URL]]-адрес  в адресной строке браузера, он отправляет HTTP-запрос GET /about на сервер, где находится apihandyman.io, так же как когда потребитель [[API]] отправляет запрос на сервер [[REST]] API. Ответ, отправленный сервером, содержит код состояния 200 OK, за которым следует [[HTML]]-страница, соответствующая [[URL]]-адресу.
Строка 9: Строка 10:
[[HTTP]] появился изначально для передачи размеченного [[гипертекст]]а, что для программных интерфейсов подходит слабо. [[HTML]] быстро эволюционировал в более строгий и машиночитаемый [[XML]], который быстро стал одним из общепринятых форматов описания вызовов [[API]]. С начала 2000-х [[XML]] начал вытесняться более простым и интероперабельным [[JSON]], и сегодня говоря о HTTP API, чаще всего имеют в виду такие интерфейсы, в которых данные передаются в формате [[JSON]] по протоколу [[HTTP]].
[[HTTP]] появился изначально для передачи размеченного [[гипертекст]]а, что для программных интерфейсов подходит слабо. [[HTML]] быстро эволюционировал в более строгий и машиночитаемый [[XML]], который быстро стал одним из общепринятых форматов описания вызовов [[API]]. С начала 2000-х [[XML]] начал вытесняться более простым и интероперабельным [[JSON]], и сегодня говоря о HTTP API, чаще всего имеют в виду такие интерфейсы, в которых данные передаются в формате [[JSON]] по протоколу [[HTTP]].


=== Методы  ==
=== Методы  ===
Методы HTTP состоят из запросов:
Методы HTTP состоят из запросов:
* GET
* GET
Строка 16: Строка 17:
* DELETE
* DELETE


=== HTTP-запрос ===
HTTP-запрос представляет собой  
HTTP-запрос представляет собой  
# применение определённого глагола к [[URL]] с  
# применение определённого глагола к [[URL]] с  
Строка 25: Строка 27:
   Host: our-api-host.tld
   Host: our-api-host.tld
   Content-Type: application/json
   Content-Type: application/json
=== Структура HTTP-сообщения ===
1. Стартовая строка, в которой определяется адрес, по которому отправляется запрос, и тип сообщения. Указывается метод, который определяет действия при получении этого сообщения. Это может быть чтение данных, их отправка, изменение или удаление.
2. Заголовки (Headers), в которых прописаны определённые параметры сообщения. Например, может быть напрямую задан язык.
3. Тело запроса (Request Body), текст сообщения — данные, которые передаются. Например, файлы, отправляемые на сервер.
[[Файл: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-запрос представляет собой

  1. применение определённого глагола к URL с
  2. указанием версии протокола,
  3. передачей дополнительной мета-информации в заголовках и, возможно,
  4. каких-то данных в теле запроса:
 POST /v1/orders HTTP/1.1
 Host: our-api-host.tld
 Content-Type: application/json

Структура HTTP-сообщения

1. Стартовая строка, в которой определяется адрес, по которому отправляется запрос, и тип сообщения. Указывается метод, который определяет действия при получении этого сообщения. Это может быть чтение данных, их отправка, изменение или удаление.

2. Заголовки (Headers), в которых прописаны определённые параметры сообщения. Например, может быть напрямую задан язык.

3. Тело запроса (Request Body), текст сообщения — данные, которые передаются. Например, файлы, отправляемые на сервер.

Http.png

Чем можно управлять через протокол 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-соединения.