PassFront
  1. PassFront
  2. База знаний
  3. DOM и браузер

Зачем нужен запрос OPTIONS в HTTP?

DOM и браузер

Запрос `OPTIONS` нужен, чтобы узнать, какие методы и заголовки поддерживает сервер для ресурса. Главное применение — CORS preflight (предварительный запрос).

CORS preflight

Перед «сложным» кросс-доменным запросом (методы кроме GET/POST/HEAD, кастомные заголовки, Content-Type: application/json) браузер автоматически шлёт OPTIONS, спрашивая разрешение:

OPTIONS /api/users
Origin: https://app.com
Access-Control-Request-Method: PUT
Access-Control-Request-Headers: Content-Type, Authorization

Сервер отвечает, что разрешено:

Access-Control-Allow-Origin: https://app.com
Access-Control-Allow-Methods: GET, POST, PUT, DELETE
Access-Control-Allow-Headers: Content-Type, Authorization
Access-Control-Max-Age: 86400

Если разрешение получено — браузер отправляет основной запрос.

Другое применение

  • Узнать доступные методы ресурса (Allow: GET, POST).
  • Проверка возможностей API.

Детали

  • OPTIONS — безопасный и идемпотентный, не меняет данные.
  • Access-Control-Max-Age кеширует результат preflight, чтобы не слать OPTIONS перед каждым запросом.
  • Сервер должен корректно обрабатывать OPTIONS, иначе кросс-доменные запросы упадут с ошибкой CORS.

Коротко для собеседования

OPTIONS узнаёт поддерживаемые методы/заголовки ресурса; главное применение — CORS preflight: браузер сам шлёт его перед сложным кросс-доменным запросом, а сервер отвечает Access-Control-Allow-*. Кешируется через Access-Control-Max-Age.

Другие вопросы раздела