Как я могу идентифицировать запрос CORS preflight?


Предварительный запрос CORS, очевидно, использует метод OPTIONS и имеет заголовок Origin. Однако браузер может решить для любого HTTP-запроса добавить заголовок Origin. Кроме того, опции могут использоваться для других функций, кроме CORS. (Как) я могу точно определить (без ложных положительных или отрицательных результатов), является ли запрос запросом CORS preflight?

2 2

2 ответа:

Проверьте Заголовок Access-Control-Request-Method . Было бы не очень разумно посылать его в запросе, отличном от предполетного запроса.

Проверьте наличие этих существенных сведений, присутствующих в предполетном запросе:

  1. HTTP-метод запроса - OPTIONS
  2. он имеет заголовок Origin
  3. у него есть заголовок Access-Control-Request-Method, указывающий, какой фактический метод он пытается использовать, чтобы использовать ваш сервис / ресурс

Соображения

Теоретически вы могли бы быть таким умным и вручную установить эти заголовки и попытаться сделать какой-то фальшивый предполетный запрос для некоторых причина.

Однако ваш браузер будет жаловаться со следующим примером сообщения: Refused to set unsafe header "Origin" (тестируется как запрос XHR на Chrome) в то время как другие приложения, такие как Postman, будут устанавливать свои собственные Origin как, скажем Origin: chrome://extension...