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

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

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

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

Вы знаете, что я могу сделать, чтобы это исправить? Я делаю запрос CORS в HTTPS. Я думаю, что это является причиной сбоя 'preflight is invalid (redirect)'. Но я не знаю, почему или что перенаправляет запрос OPTIONS.

Спасибо.

6 ответов

Решение

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

Браузеры в настоящее время отказываются следовать перенаправлению в этом случае, потому что спецификации CORS ранее требовался браузер, чтобы сделать это. Ограничения на самом деле больше нет в спецификации, но браузеры должны обновить свои реализации, чтобы соответствовать изменению спецификации.

Вы можете изменить свой код, чтобы браузер не отправлял запрос 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 сервер перенаправляет после OPTIONS.
  2. Измените свой код, чтобы вместо этого сделать запрос на этот другой URL.

Смотрите ответ на запрос CORS с Preflight и перенаправлением: запрещено. Обходные? для деталей о возможном обходном пути.

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

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

' http://example.com/api/v2/tickets'

Что должно быть:

'https://example.com/api/v2/tickets'

Прежде всего убедитесь, что у вас есть "Access-Control-Allow-Origin": "*" в заголовках.

затем просто удалите "/" в конце URL-адреса

бывший:

      url: "https://facebook/api/login/"

к ->

      url: "https://facebook/api/login" (without '/')

В моем случае мне не нужно было устанавливать в заголовке запроса «Access-Control-Allow-Origin»: «*». URL ДОЛЖЕН заканчиваться символом "/" в конце

в моем случае я также решаю этот предварительный запрос, просто поставив одну косую черту (/) в конце API

#джанго #реактджс

На запрос CORS сервер ответил перенаправлением HTTP на URL-адрес источника, отличного от исходного запроса, что не разрешено во время запросов CORS.

Например, если была запрошена страница , а ответ HTTP «301 перемещен навсегда», «307 временное перенаправление» или «308 постоянное перенаправление» с расположением запрос CORS не будет выполнен таким образом.

Чтобы решить эту проблему, обновите свой код, чтобы использовать новый URL-адрес, указанный в перенаправлении, тем самым избегая перенаправления. Сервер ответил на запрос CORS с перенаправлением HTTP на URL-адрес из источника, отличного от исходного запроса, который не допускается во время запросов CORS.

Например, если была запрошена страница https://service.tld/fetchdatahttps://service.tld/fetchdata , а ответ HTTP «301 перемещен навсегда», «307 временное перенаправление» или «308 постоянное перенаправление» с расположением https://anotherservice.net/getdatahttps://anotherservice .net/getdata запрос CORS не будет выполнен таким образом.

Чтобы решить эту проблему, обновите свой код, чтобы использовать новый URL-адрес, указанный в перенаправлении, тем самым избегая перенаправления.

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