Ответ
HTTP-метод OPTIONS используется для получения информации о доступных опциях и требованиях к коммуникации для определённого URL (ресурса) на сервере.
У него есть два основных назначения:
-
Проверка возможностей сервера: Клиент может запросить, какие HTTP-методы (например,
GET,POST,PUT,DELETE) сервер поддерживает для данного ресурса. Сервер вернёт их в заголовкеAllow. -
Предварительный запрос в CORS (Preflight Request): Это наиболее частое применение. Перед отправкой "сложного" кросс-доменного запроса (например,
PUT,DELETEили запроса с нестандартными заголовками), браузер автоматически отправляетOPTIONSзапрос. Цель — проверить, разрешает ли сервер такой запрос с другого домена, чтобы избежать проблем с безопасностью.
Пример CORS Preflight Request:
-
Браузер отправляет предварительный запрос:
OPTIONS /api/items/1 HTTP/1.1 Host: api.example.com Origin: https://my-app.com Access-Control-Request-Method: PUT Access-Control-Request-Headers: X-Custom-Header, Content-Type -
Сервер отвечает, разрешая запрос:
HTTP/1.1 204 No Content Access-Control-Allow-Origin: https://my-app.com Access-Control-Allow-Methods: GET, POST, PUT, DELETE Access-Control-Allow-Headers: X-Custom-Header, Content-Type Access-Control-Max-Age: 86400
Если ответ сервера положительный, браузер отправляет основной PUT запрос.
Ответ 18+ 🔞
А, слушай, вот эта штука — OPTIONS! Ну, метод такой, блядь. Не GET и не POST, а как бы на разведку. Типа, прикинь, ты лезешь на чужой сервер со своим PUT или ещё какой хуйнёй, а браузер-то не дурак, он сначала спросит: «А можно, сука, вообще?»
Вот он и шлёт этот самый OPTIONS, как будто стучится: «Эй, ёпта, я с домена my-app.com, я тут хочу PUT отправить и заголовок X-Custom-Header прилепить. Ты не против?»
А сервер, если он не конченый пидорас, должен ответить что-то вроде: «Да похуй, залетай. Разрешаю методы GET, POST, PUT, DELETE и вот эти твои кривые заголовки. И, кстати, запоминай это на сутки (Access-Control-Max-Age), чтобы не доёбывался каждую секунду».
И только после этого, когда браузер получил этот зелёный свет, он уже спокойно шлёт основной запрос. А если сервер молчит или говорит «нет» — всё, пиздец, запрос заблокирован, хоть обосрись.
Короче, OPTIONS — это такая предварительная жопа-проверка, чтобы не налететь на хуй с горы из-за политики CORS. Без него ни один уважающий себя браузер «сложный» кросс-доменный запрос не пропустит. Вот такая, блядь, бюрократия, в рот меня чих-пых!