Как я могу идентифицировать запрос CORS preflight?
Предварительный запрос CORS, очевидно, использует метод OPTIONS и имеет заголовок Origin. Однако браузер может решить для любого HTTP-запроса добавить заголовок Origin. Кроме того, опции могут использоваться для других функций, кроме CORS. (Как) я могу точно определить (без ложных положительных или отрицательных результатов), является ли запрос запросом CORS preflight?
2 ответа:
Проверьте Заголовок Access-Control-Request-Method . Было бы не очень разумно посылать его в запросе, отличном от предполетного запроса.
Проверьте наличие этих существенных сведений, присутствующих в предполетном запросе:
- HTTP-метод запроса -
OPTIONS
- он имеет заголовок
Origin
- у него есть заголовок
Access-Control-Request-Method
, указывающий, какой фактический метод он пытается использовать, чтобы использовать ваш сервис / ресурсСоображения
Теоретически вы могли бы быть таким умным и вручную установить эти заголовки и попытаться сделать какой-то фальшивый предполетный запрос для некоторых причина.
Однако ваш браузер будет жаловаться со следующим примером сообщения:
Refused to set unsafe header "Origin"
(тестируется как запрос XHR на Chrome) в то время как другие приложения, такие как Postman, будут устанавливать свои собственныеOrigin
как, скажемOrigin: chrome://extension...