Przeglądasz dokumentację Apigee Edge.
Przejdź do
Dokumentacja Apigee X. informacje.
Krótki opis problemu
Wywołanie interfejsu API ze zintegrowanego portalu dla programistów kończy się niepowodzeniem i
Unknown Error lub pustą odpowiedź w polu
Wypróbuj ten interfejs API
panel.
Komunikaty o błędach
Może pojawić się pusta odpowiedź lub poniższy komunikat o błędzie dotyczący interfejsu API w zintegrowanym portalu:
Unknown Error
W sekcji Narzędzia dla programistów > Konsola, zobaczysz te informacje: błąd:
Access to XMLHTTPRequest at 'API_URL' from origin 'URL_of_Integrated_DevPortal' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
ogólny komunikat o błędzie, taki jak na Narzędzia dla programistów > Karta Console wygląda tak:
Możliwe przyczyny
| Przyczyna | Opis | Instrukcje rozwiązywania problemów dotyczące |
|---|---|---|
| Nieobsługiwany błąd zasad | Domyślna odpowiedź dotycząca błędu jest wysyłana bez nagłówków CORS, gdy którakolwiek zasada nie działa w czasie działania żądania do interfejsu API. | Użytkownicy Edge Public Cloud |
| Wiele wartości parametru Access-Control-Allow-Origin | Użyj opcji Add zamiast Set (Ustaw) w sekcji Assign Message Policy (Przypisywanie zasady wiadomości). | Użytkownicy Edge Public Cloud |
Przyczyna: nieobsługiwany błąd zasad
Diagnostyka
- Sprawdź, czy problem występuje tylko wtedy, gdy oczekiwana jest odpowiedź inna niż
2XX. - W przypadku nieudanych żądań sprawdź, czy w przepływie serwera proxy są zasady.
-
Prześledź żądanie i sprawdź, czy zasada
continueOnError="false"powoduje awarię i powoduje zgłoszenie błędu. - Jeśli tak, sprawdź, czy Zasada AssignMessage CORS została wykonana lub nie wystąpiła w błędzie w procesie reagowania.
- Jeśli nie, to właśnie to jest przyczyną problemu.
Dzieje się tak, ponieważ dowolna zasada z elementemcontinueOnError="false"nie uda się, a następnie żądanie trafia do w procesie odpowiedzi na błędy. Jeśli nie ma wyraźnej obsługi wadliwej w procesie odpowiedzi na błąd, a potem domyślna zasady są odsyłane. Ta odpowiedź o błędzie nie zawiera żadnych Nagłówki CORS. W efekcie wywołanie interfejsu API przez zintegrowanego dewelopera wystąpi błąd portaluUnknown error.
Na poniższych zrzutach ekranu widać przykładowy komunikat o błędzie i przykład komunikat o powodzeniu.
Przykładowy komunikat o błędzie w panelu zintegrowanego portalu Wypróbuj ten interfejs API oraz w oknie Trace (Śledzenie) serwera proxy:
Przykładowy komunikat o powodzeniu w zintegrowanym portalu Wypróbuj ten interfejs API oraz w oknie Trace (Śledzenie) serwera proxy:
Rozdzielczość
- Zamiast polegać na domyślnym komunikacie o błędzie reguła błędu musi być wdrożona, aby obsługiwać odpowiedź błędu. Uwzględnij AssignMessage zasadę CORS z odpowiednimi nagłówkami i wywołać ją. w FaultRule.
- Czasami zdefiniowanie reguły błędu dla każdego błąd; dlatego można wdrożyć domyślną regułę błędu, aby wykonać zasadę CORS AssignMessage:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ProxyEndpoint name="proxy-endpoint-name">
<Description/>
<!-- Add a default fault rule to add CORS -->
<DefaultFaultRule name="fault-rule">
<Step>
<Name>add-cors</Name>
</Step>
</DefaultFaultRule>
<FaultRules/>
<!--
<Flows />
Rest of the proxy definition
-->
</ProxyEndpoint>Przyczyna: wiele wartości parametru Access-Control-Allow-Origin
Diagnostyka
- Sprawdź wartość nagłówka Access-Control-Allow-Origin w
- Nagłówek Access-Control-Allow-Origin zezwala tylko na jedną wartość ustaw. Ustawienie więcej niż jednej wartości może powodować problem CORS, a w portalu dla programistów nie będzie można wyświetlić żadnych odpowiedzi.
- Jeśli wartość nagłówka Access-Control-Allow-Origin w śledzeniu
wygląda tak:
*,*oznacza, że zarówno serwer docelowy, zasada AssignMessage CORS ustawia swoją wartość. - Może się tak zdarzyć, gdy użytkownik użyje metody
<Add> elementdla Access-Control-Allow-Origin w lub sam backend ustawia wiele wartości.
Przykładowy element Access-Control-Allow-Origin równy *,*:
Przykładowy element Access-Control-Allow-Origin równy *:
Przykład z użyciem parametru <Add>:
Przykład z użyciem parametru <Set>:
Rozdzielczość
- Zalecamy użycie atrybutu
<Set> element(zamiast<Add> element) dla Access-Control-Allow-Origin jako jest dozwolona tylko jedna wartość. - Możesz też ustawić nagłówek Access-Control-Allow-Origin tylko w w jednym miejscu, Zasada CORS AssignMessage lub serwer docelowy.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <AssignMessage async="false" continueOnError="false" enabled="true" name="set-cors"> <DisplayName>Set CORS</DisplayName> <FaultRules/> <Properties/> <Set> <Headers> <Header name="Access-Control-Allow-Origin">*</Header> </Headers> </Set> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="response"/> </AssignMessage>
Jeśli nadal potrzebujesz pomocy zespołu pomocy Apigee, wejdź na Konieczne jest zbieranie informacji diagnostycznych.
Musi zbierać informacje diagnostyczne
Zbierz poniższe informacje diagnostyczne, a następnie skontaktuj się z Obsługa Apigee:
- Nazwa organizacji
- Nazwa środowiska
- Nazwa serwera proxy interfejsu API
- Kompletne polecenie curl użyte do odtworzenia błędu
- Plik śledzenia żądań do interfejsu API
- Pełne dane wyjściowe odpowiedzi z serwera docelowego/backendu wraz z wielkość ładunku,