Wiele razy natknąłem się na problemy CORS i zwykle mogę je naprawić, ale naprawdę chcę to zrozumieć, widząc to w paradygmacie stosu MEAN.
Zanim po prostu dodałem oprogramowanie pośrednie na moim serwerze ekspresowym, aby wyłapać te rzeczy, ale wygląda na to, że istnieje pewien rodzaj wstępnego przechwytywania, który pomija moje żądania.
Pole nagłówka żądania Access-Control-Allow-Headers nie jest dozwolone przez Access-Control-Allow-Headers w odpowiedzi podczas inspekcji wstępnej
Zakładałem, że mogę to zrobić:
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Headers","*")
})
lub odpowiednik, ale wydaje się, że to nie naprawia. Ja też oczywiście próbowałem
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Headers","Access-Control-Allow-Headers")
})
Wciąż nie ma szczęścia.
Access-Control-Request-Headers
header("Access-Control-Allow-Headers: Content-Type")
Oto, co musisz dodać, aby działało.
Przeglądarka wysyła żądanie inspekcji wstępnej (z metodą typu OPCJE), aby sprawdzić, czy dostęp do usługi hostowanej na serwerze jest możliwy z przeglądarki w innej domenie. W odpowiedzi na żądanie inspekcji wstępnej, jeśli wstrzykujesz powyżej nagłówków, przeglądarka rozumie, że można wykonywać kolejne połączenia, a ja otrzymam prawidłową odpowiedź na moje rzeczywiste wywołanie GET / POST. możesz ograniczyć domenę, do której dostęp jest przyznany, używając Access-Control-Allow-Origin ”,„ localhost, xvz.com ”zamiast *. (* zapewni dostęp do wszystkich domen)
źródło
*
za...-Origin
itrue
za...-Credentials
. Nie zawiedzie w przypadku żądań, które nie są poświadczone, ale nie będzie też działać w przypadku żądań, które nie są poświadczone. Zobacz link, który opublikowałem w mojej odpowiedzi.response.setHeader("Access-Control-Allow-Headers", "*")
? Jaki jest wpływ tego bezpieczeństwa na bezpieczeństwo?Ten problem rozwiązano
Szczególnie w moim projekcie (express.js / nodejs)
Aktualizacja:
Za każdym razem błąd:
Access-Control-Allow-Headers is not allowed by itself in preflight response
błąd można zobaczyć, co złego w narzędziu Chrome dla programistów :powyżej błędu brakuje,
Content-Type
więc dodaj ciągContent-Type
doAccess-Control-Allow-Headers
źródło
Przyjęta odpowiedź jest w porządku, ale miałem trudności z jej zrozumieniem. Oto prosty przykład, aby to wyjaśnić.
W mojej prośbie o ajax miałem standardowy nagłówek autoryzacji.
Ten kod powoduje błąd w pytaniu. Na moim serwerze nodejs musiałem dodać autoryzację w dozwolonych nagłówkach:
źródło
Aby dodać do innych odpowiedzi. Miałem ten sam problem i jest to kod, którego użyłem na moim serwerze ekspresowym, aby zezwolić na wywołania REST:
Ten kod zasadniczo przechwytuje wszystkie żądania i dodaje nagłówki CORS, a następnie kontynuuje moje normalne trasy. Gdy pojawia się żądanie OPCJE, odpowiada tylko nagłówkami CORS.
EDYCJA: Korzystałem z tej poprawki dla dwóch oddzielnych serwerów ekspresowych nodejs na tej samej maszynie. Na koniec naprawiłem problem z prostym serwerem proxy.
źródło
Właśnie natrafiłem na ten problem, w kontekście ASP.NET upewnij się, że twój Web.config wygląda następująco:
Zwróć uwagę na wartość autoryzacji dla
Access-Control-Allow-Headers
klucza. Brakowało mi wartości autoryzacji, ta konfiguracja rozwiązuje mój problem.źródło
Bardzo dobrze, użyłem tego w projekcie silex
źródło
W Chrome:
Dla mnie ten błąd został wywołany przez spację końcową w adresie URL tego wywołania.
źródło
Wystarczy dodać, że możesz umieścić te nagłówki również w pliku konfiguracyjnym Webpack. Potrzebowałem ich tak, jak w moim przypadku, gdy działałem na serwerze deweloperskim webpack.
źródło
res.setHeader („Access-Control-Allow-Headers”, „*”);
źródło
Otrzymałem błąd zgłoszony przez OP za pomocą Django, React i biblioteki django-cors-headers. Aby naprawić to za pomocą tego stosu, wykonaj następujące czynności:
W settings.py dodaj poniżej zgodnie z oficjalną dokumentacją .
źródło
ten problem występuje, gdy tworzymy niestandardowy nagłówek żądania. To żądanie, które korzysta z
HTTP OPTIONS
i zawiera kilka nagłówków.Wymagany jest nagłówek tego żądania
Access-Control-Request-Headers
, który powinien być częścią nagłówka odpowiedzi i powinien umożliwiać żądanie od wszystkich źródeł. Czasami potrzebujeContent-Type
również nagłówka odpowiedzi. Tak powinien wyglądać nagłówek odpowiedzi -źródło
W wywołaniu API Post przesyłamy dane w treści żądania. Więc jeśli wyślemy dane poprzez dodanie dodatkowego nagłówka do wywołania API. Następnie nastąpi pierwsze OPCJE wywołanie interfejsu API, a następnie zadzwoni post. Dlatego najpierw musisz obsłużyć wywołanie interfejsu OPTION API.
Możesz poradzić sobie z tym problemem, pisząc filtr, w którym musisz sprawdzić wywołanie opcji API wywołania opcji i zwrócić 200 OK. Poniżej znajduje się przykładowy kod:
źródło
Jeśli próbujesz dodać niestandardowy nagłówek do nagłówków żądania, musisz poinformować serwer, że określony nagłówek może mieć miejsce. Miejsce do zrobienia znajduje się w klasie, która filtruje żądania. W poniższym przykładzie niestandardowa nazwa nagłówka to „typ”:
źródło
Po spędzeniu prawie dnia dowiedziałem się, że dodanie dwóch poniższych kodów rozwiązało mój problem.
Dodaj to w Global.asax
i w konfiguracji sieci dodaj poniżej
źródło
Ja również napotkałem ten sam problem w Angular 6. Rozwiązałem ten problem, używając poniższego kodu. Dodaj kod w pliku component.ts.
źródło
Ten sam problem, z którym miałem do czynienia.
Zrobiłem prostą zmianę.
źródło
Wiadomość jest jasna, że „API” nie jest dozwolone w API. Ustaw
nagłówki kontroli dostępu i zezwól: „Typ zawartości, autoryzacja”
źródło
Dodanie korków w funkcji get To działało dla mnie
źródło