Как я могу определить предварительный запрос CORS?

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

2 ответа

Решение

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

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

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

Соображения

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

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

Другие вопросы по тегам