← Назад ко всем вопросам

Что такое Preflight запрос

1️⃣ Как кратко ответить

Preflight запрос — это предварительный HTTP-запрос, отправляемый браузером перед основным запросом для проверки разрешений на выполнение CORS (Cross-Origin Resource Sharing) операций. Он используется для запросов, которые могут изменить данные на сервере или содержат нестандартные заголовки.

2️⃣ Подробное объяснение темы

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

Зачем нужен Preflight запрос

Когда веб-приложение пытается выполнить HTTP-запрос к ресурсу на другом домене, браузер должен убедиться, что сервер разрешает такой запрос. Preflight запросы используются для проверки разрешений на выполнение "непростых" запросов, которые могут включать:

  • Использование методов HTTP, отличных от GET, POST или HEAD (например, PUT, DELETE).
  • Наличие нестандартных заголовков.
  • Использование Content-Type, отличного от application/x-www-form-urlencoded, multipart/form-data или text/plain.

Как работает Preflight запрос

  1. Отправка Preflight запроса: Браузер отправляет HTTP-запрос с методом OPTIONS на сервер, чтобы проверить, разрешает ли сервер выполнение основного запроса. Этот запрос включает заголовки, которые описывают основной запрос, такие как Access-Control-Request-Method и Access-Control-Request-Headers.

  2. Ответ сервера: Сервер отвечает на Preflight запрос, указывая, разрешает ли он выполнение основного запроса. Ответ включает заголовки, такие как Access-Control-Allow-Methods и Access-Control-Allow-Headers, которые определяют, какие методы и заголовки разрешены.

  3. Выполнение основного запроса: Если сервер разрешает выполнение основного запроса, браузер отправляет его. В противном случае запрос блокируется.

Пример Preflight запроса

Рассмотрим пример, когда веб-приложение на домене example.com хочет отправить DELETE запрос на ресурс api.example.org.

Preflight запрос

OPTIONS /resource HTTP/1.1
Host: api.example.org
Origin: http://example.com
Access-Control-Request-Method: DELETE
Access-Control-Request-Headers: Content-Type
  • OPTIONS /resource HTTP/1.1: Метод OPTIONS используется для запроса разрешений.
  • Host: api.example.org: Указывает домен, к которому направлен запрос.
  • Origin: http://example.com: Указывает источник, с которого исходит запрос.
  • Access-Control-Request-Method: DELETE: Указывает метод, который будет использоваться в основном запросе.
  • Access-Control-Request-Headers: Content-Type: Указывает заголовки, которые будут использоваться в основном запросе.

Ответ сервера

HTTP/1.1 204 No Content
Access-Control-Allow-Origin: http://example.com
Access-Control-Allow-Methods: GET, POST, DELETE
Access-Control-Allow-Headers: Content-Type
  • HTTP/1.1 204 No Content: Указывает, что запрос выполнен успешно, но тело ответа отсутствует.
  • Access-Control-Allow-Origin: http://example.com: Разрешает запросы с указанного источника.
  • Access-Control-Allow-Methods: GET, POST, DELETE: Указывает, какие методы разрешены.
  • Access-Control-Allow-Headers: Content-Type: Указывает, какие заголовки разрешены.

Если сервер отвечает положительно, браузер выполнит основной DELETE запрос. Если нет, запрос будет заблокирован.

Preflight запросы помогают обеспечить безопасность веб-приложений, предотвращая выполнение потенциально опасных операций без явного разрешения сервера.

Тема: HTTP, REST
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки