Что такое Preflight запрос
Разбор вопроса «Что такое Preflight запрос» для Frontend Developer: что проверяет интервьюер, ключевые тезисы, практические примеры и частые ошибки.
Вопрос
Что такое Preflight запрос
Профессия
Frontend Developer
Что хочет услышать интервьюер
Интервьюер хочет убедиться, что кандидат понимает механизм CORS и роль Preflight запросов в обеспечении безопасности веб-приложений. Также важно, чтобы кандидат мог объяснить, в каких ситуациях такие запросы возникают и как они работают.
Ключевые тезисы
- Preflight запрос — это автоматический запрос, отправляемый браузером перед основным запросом, если он соответствует определенным критериям сложности.
- Этот запрос использует метод OPTIONS и проверяет, поддерживает ли сервер запрашиваемый метод и заголовки.
- Preflight запросы возникают при кросс-доменных запросах (CORS), если запрос использует нестандартные методы (например, PUT, DELETE) или заголовки.
- Цель Preflight запроса — обеспечить безопасность, предотвращая отправку потенциально опасных запросов на сервер.
- Пример: если клиент отправляет запрос с пользовательским заголовком, браузер сначала отправит Preflight запрос для проверки разрешений.
Подробный ответ
Preflight запрос — это механизм, используемый браузерами для обеспечения безопасности при выполнении кросс-доменных запросов (CORS). Когда клиентское приложение отправляет запрос на сервер, находящийся в другом домене, браузер может сначала отправить Preflight запрос, чтобы проверить, поддерживает ли сервер запрашиваемый метод и заголовки. Этот запрос использует метод HTTP OPTIONS и отправляется автоматически, если запрос соответствует определенным критериям сложности. Например, если запрос использует нестандартные методы (PUT, DELETE) или содержит пользовательские заголовки, браузер отправит Preflight запрос. Основная цель этого механизма — предотвратить отправку потенциально опасных запросов на сервер, что повышает безопасность веб-приложений. Preflight запросы возникают только при кросс-доменных запросах и не используются при запросах в пределах одного домена. Это важный аспект безопасности, который необходимо учитывать при разработке веб-приложений, особенно при работе с API.
Практические примеры
Пример 1
Предположим, клиентское приложение отправляет запрос на сервер с использованием метода PUT и пользовательского заголовка 'X-Custom-Header'. Браузер сначала отправит Preflight запрос методом OPTIONS с заголовками 'Access-Control-Request-Method: PUT' и 'Access-Control-Request-Headers: X-Custom-Header'. Сервер должен ответить соответствующими заголовками, указывающими, поддерживает ли он такие запросы.
Пример 2
Если сервер поддерживает запросы с методом PUT и заголовком 'X-Custom-Header', он вернет ответ с заголовками 'Access-Control-Allow-Methods: PUT' и 'Access-Control-Allow-Headers: X-Custom-Header'. После этого браузер отправит основной запрос.
Частые ошибки
- Типичная ошибка — игнорирование необходимости корректной обработки Preflight запросов на сервере. Например, если сервер не возвращает ожидаемые заголовки 'Access-Control-Allow-Methods' и 'Access-Control-Allow-Headers', браузер блокирует основной запрос, что приводит к ошибкам в приложении.
- Еще одна ошибка — попытка избежать Preflight запросов без понимания последствий. Например, использование только простых методов (GET, POST) и стандартных заголовков может снизить функциональность приложения.
Связанные темы
- CORS (Cross-Origin Resource Sharing)
- HTTP методы (GET, POST, PUT, DELETE)
- Заголовки HTTP (Access-Control-Allow-Origin, Access-Control-Allow-Methods)
- Безопасность веб-приложений
Follow-up вопросы
Как браузер определяет, нужно ли отправлять Preflight запрос?
Уровень: basic
Браузер отправляет Preflight запрос, если запрос является кросс-доменным и использует нестандартные методы (например, PUT, DELETE) или пользовательские заголовки. Также это происходит, если запрос отправляет данные в формате, отличном от текстового или JSON.
Какие заголовки используются в Preflight запросе и ответе?
Уровень: intermediate
В Preflight запросе используются заголовки, такие как Access-Control-Request-Method и Access-Control-Request-Headers, чтобы указать метод и заголовки основного запроса. В ответе сервер отправляет Access-Control-Allow-Methods и Access-Control-Allow-Headers, чтобы подтвердить разрешения.
Можно ли избежать Preflight запросов? Если да, то как?
Уровень: intermediate
Да, можно избежать Preflight запросов, если использовать простые запросы, такие как GET или POST с определенными ограничениями (например, без пользовательских заголовков и с использованием стандартных типов контента, таких как application/x-www-form-urlencoded или multipart/form-data).
Как влияет Preflight запрос на производительность приложения?
Уровень: advanced
Preflight запрос добавляет дополнительный HTTP-запрос перед основным, что увеличивает время выполнения операции. Это может негативно сказаться на производительности, особенно если таких запросов много или сеть медленная.
Как сервер должен обрабатывать Preflight запросы?
Уровень: advanced
Сервер должен корректно обрабатывать Preflight запросы, проверяя заголовки Access-Control-Request-Method и Access-Control-Request-Headers, и возвращать соответствующие разрешения в заголовках Access-Control-Allow-Methods и Access-Control-Allow-Headers. Также важно указать Access-Control-Max-Age для кэширования ответа.
Работал ли с Postman
Разбор вопроса «Работал ли с Postman» для Frontend Developer: что проверяет интервьюер, ключевые тезисы, практические примеры и частые ошибки.
Как настроить доступ к домену при использовании CORS
Разбор вопроса «Как настроить доступ к домену при использовании CORS» для Frontend Developer: что проверяет интервьюер, ключевые тезисы, практические примеры и частые ошибки.