Как решить, "предварительная проверка неверна (перенаправление)" в 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
Если вы не можете изменить свой код, чтобы избежать необходимости предварительной проверки браузерами, тогда есть еще один вариант:
- Изучите ответ и посмотрите, на какой URL сервер перенаправляет после OPTIONS.
- Измените свой код, чтобы вместо этого сделать запрос на этот другой URL.
Смотрите ответ на запрос CORS с Preflight и перенаправлением: запрещено. Обходные? для деталей о возможном обходном пути.
Также, как отмечалось там, ограничение на браузеры, не следующие перенаправлениям для предварительных рейсов CORS, больше не входит в спецификацию, но браузеры должны обновить свои реализации, чтобы соответствовать изменению спецификации.
Это иногда случается, когда вы пытаетесь вызвать https- службу как http, например, когда вы выполняете запрос:
Что должно быть:
'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-адрес, указанный в перенаправлении, тем самым избегая перенаправления.