2017-02-10 78 views
6

Podążyłem za tym krokiem, aby skonfigurować mój serwer, aby włączyć CORS. https://docs.microsoft.com/en-us/aspnet/web-api/overview/security/enabling-cross-origin-requests-in-web-apiJak rozwiązać problem "preflight is invalid (redirect)" w CORS

Ale teraz w moim konsoli dev przeglądarka, widzę ten komunikat o błędzie:

XMLHttpRequest nie może załadować https://serveraddress/abc. Odpowiedź na preflight jest nieprawidłowa (przekierowanie)

Czy wiesz, co mogę zrobić, aby to naprawić? Robię żądanie CORS w HTTPS. Myślę, że to powoduje niepowodzenie "preflight is invalid (redirect)". Ale nie wiem, dlaczego lub co przekierowuje żądanie OPTIONS.

Dziękuję.

Odpowiedz

9

Twój kod powoduje, że Twoja przeglądarka wysyła CORS preflight OPTIONS request, która wykonuje przekierowanie.

Przeglądarki obecnie odmawiają zastosowania przekierowania w tym przypadku, ponieważ specyfikacja CORS wymagała wcześniej tej przeglądarki. Ograniczenie nie jest już w specyfikacji, ale przeglądarki muszą zaktualizować swoje implementacje, aby dopasować zmiany specyfikacji.

Możesz mieć możliwość dostosowania swojego kodu, aby uniknąć uruchamiania przeglądarki, aby wysłać żądanie OPCJE.

Jeśli chodzi o co to wszystko dzieje się w tym przypadku, pierwszą rzeczą, aby pamiętać to, przeglądarek zrobić Inspekcja wstępna CORS jeżeli:

  • metoda żądania jest cokolwiek niż GET, HEAD lub POST
  • masz ustawione niestandardowe nagłówki żądania inne niż Accept, Accept-Language, Content-Language, Content-Type, DPR, Downlink, Save-Data, Viewport-Width lub Width
  • Content-Type żądanie nagłówka ma wartość inną niż application/x-www-form-urlencoded, multipart/form-data lub text/plain

Jeśli nie mogą zmienić swój kod, aby uniknąć potrzeby przeglądarek zrobić Inspekcja wstępna, a następnie innym rozwiązaniem jest:

  1. Zbadać odpowiedź i zobacz, do jakiego adresu URL przekierowuje serwer po OPCJACH.
  2. Zmień kod, aby zamiast tego wysłać żądanie bezpośrednio na ten inny adres URL.

Aby uzyskać szczegółowe informacje na temat możliwego obejścia, zobacz odpowiedź pod numerem CORS request with Preflight and redirect: disallowed. Workarounds?.

Jak już wspomniano, ograniczenie w stosunku do przeglądarek, które nie wykonują przekierowań na preflighty CORS, nie znajduje się już w specyfikacji, ale przeglądarki muszą zaktualizować swoje implementacje, aby pasowały do ​​zmiany specyfikacji.

+0

Dzięki za odpowiedź. postąpię zgodnie z twoją radą. Moja aplikacja musi wysłać aplikację Content-Type/json do serwera, co jest przyczyną uruchomienia przed lotem. I nie mogę tego zmienić. – n179911

+0

OK, ale pamiętaj, że [poprawka do tego trafiła w źródłach Blink/Chromium] (https: //chromium.googlesource.com/chromium/src/+/eaeb7a5f8e9432594d8bcc09956c1f50e8f0ba66), ale zostanie wysłany w Chrome 57, którego wersja docelowa ma zostać wydana w połowie marca. Ale w międzyczasie, jeśli chcesz go przetestować, możesz pobrać [aktualną wersję Chrome Beta] (https://chromereleases.googleblog.com/2017/02/beta-channel-update-for-desktop_8.html) , która już ma zmianę. – sideshowbarker