Каково назначение HTTP-метода OPTIONS?

Ответ

HTTP-метод OPTIONS используется для получения информации о доступных опциях и требованиях к коммуникации для определённого URL (ресурса) на сервере.

У него есть два основных назначения:

  1. Проверка возможностей сервера: Клиент может запросить, какие HTTP-методы (например, GET, POST, PUT, DELETE) сервер поддерживает для данного ресурса. Сервер вернёт их в заголовке Allow.

  2. Предварительный запрос в CORS (Preflight Request): Это наиболее частое применение. Перед отправкой "сложного" кросс-доменного запроса (например, PUT, DELETE или запроса с нестандартными заголовками), браузер автоматически отправляет OPTIONS запрос. Цель — проверить, разрешает ли сервер такой запрос с другого домена, чтобы избежать проблем с безопасностью.

Пример CORS Preflight Request:

  1. Браузер отправляет предварительный запрос:

    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
  2. Сервер отвечает, разрешая запрос:

    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. Без него ни один уважающий себя браузер «сложный» кросс-доменный запрос не пропустит. Вот такая, блядь, бюрократия, в рот меня чих-пых!