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:
- Zbadać odpowiedź i zobacz, do jakiego adresu URL przekierowuje serwer po OPCJACH.
- 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.
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
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