Как решить, "предварительная проверка недействительна (перенаправление)" или "перенаправление не разрешено для предварительной проверки"

Я выполнил этот шаг, чтобы настроить мой сервер, чтобы включить CORS. https://docs.microsoft.com/en-us/aspnet/web-api/overview/security/enabling-cross-origin-requests-in-web-api

Но теперь в моем браузере dev console, я вижу это сообщение об ошибке:

XMLHttpRequest не может загрузить https://serveraddress/abc. Ответ для preflight недействителен (перенаправление)

Знаете ли вы, что я могу сделать, чтобы исправить это? Я делаю запрос CORS в HTTPS. Я думаю, что это приводит к сбою "предполетного отказа" (переадресации). Но я не знаю, почему или что перенаправляет запрос OPTIONS.

Спасибо.

Ответ 1

Ваш код заставляет ваш браузер отправлять предварительный запрос CORS OPTIONS, а серверы отвечают перенаправлением 3xx. Вместо этого он должен ответить сообщением об успехе 2xx.

Вы можете изменить свой код, чтобы браузер не отправлял запрос OPTIONS.

Что касается всего, что происходит в этом случае, важно знать, что браузеры выполняют предварительную проверку CORS, если:

  • метод запроса - это что угодно, кроме GET, HEAD или POST
  • Вы установили пользовательские заголовки запроса, отличные от Accept, Accept-Language, Content-Language, Content-Type, DPR, Downlink, Save-Data, Viewport-Width или Width
  • заголовок запроса Content-Type имеет значение, отличное от application/x-www-form-urlencoded, multipart/form-data или text/plain

Если вы не можете изменить свой код, чтобы браузеры не выполняли предварительную проверку, тогда есть еще один вариант:

  1. Изучите URL-адрес в заголовке ответа Location в ответе на запрос OPTIONS.
  2. Измените свой код, чтобы вместо этого сделать запрос на этот другой URL.

Разница между URL-адресами может быть такой простой, как конечная косая черта в пути - например, вам может потребоваться изменить URL-адрес в коде на http://localhost/api/auth/login/ (обратите внимание на конечную косую черту) вместо http://localhost/api/auth/login (без косой черты).

Вы можете использовать панель "Сеть" в браузере devtools, чтобы проверить ответ на запрос OPTIONS и найти URL перенаправления в значении заголовка ответа Location.

Ответ 2

это иногда случается, когда вы пытаетесь вызвать службу https как http

for example when u perform a request on 'http://example.com/api/v2/tickets' 
which should be 'https://example.com/api/v2/tickets'