Зачем нужен запрос 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.