Nieznany błąd w tym panelu interfejsu API

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:

ogólny komunikat o błędzie. Kliknij, aby wyświetlić większy obraz. ogólny komunikat o błędzie

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

  1. Sprawdź, czy problem występuje tylko wtedy, gdy oczekiwana jest odpowiedź inna niż 2XX.
  2. W przypadku nieudanych żądań sprawdź, czy w przepływie serwera proxy są zasady.
  3. Prześledź żądanie i sprawdź, czy zasada continueOnError="false" powoduje awarię i powoduje zgłoszenie błędu.
    1. Jeśli tak, sprawdź, czy Zasada AssignMessage CORS została wykonana lub nie wystąpiła w błędzie w procesie reagowania.
    2. Jeśli nie, to właśnie to jest przyczyną problemu.
      Dzieje się tak, ponieważ dowolna zasada z elementem continueOnError="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 portalu Unknown 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 błędzie. Kliknij, aby powiększyć obraz przykładowy komunikat o błędzie

Przykładowy komunikat o powodzeniu w zintegrowanym portalu Wypróbuj ten interfejs API oraz w oknie Trace (Śledzenie) serwera proxy:

przykładowy komunikat o powodzeniu, kliknij, aby wyświetlić większy obraz przykładowy komunikat o powodzeniu

Rozdzielczość

  1. 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.
  2. 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

  1. Sprawdź wartość nagłówka Access-Control-Allow-Origin w
  2. 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.
  3. 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ść.
  4. Może się tak zdarzyć, gdy użytkownik użyje metody <Add> element dla Access-Control-Allow-Origin w lub sam backend ustawia wiele wartości.

Przykładowy element Access-Control-Allow-Origin równy *,*:

przykład użycia wielu wartości, kliknij, aby wyświetlić większy obraz użyto wielu przykładowych wartości

Przykładowy element Access-Control-Allow-Origin równy *:

przykładowa pojedyncza wartość, kliknij, aby wyświetlić większy obraz użyta przykładowa jedna wartość

Przykład z użyciem parametru <Add>:

przykład użycia funkcji Dodaj, kliknij, aby powiększyć obraz przykład z użyciem funkcji Dodaj

Przykład z użyciem parametru <Set>:

przykład z użyciem opcji Ustaw, kliknij, aby powiększyć obraz przykład z wykorzystaniem polecenia

Rozdzielczość

  1. Zalecamy użycie atrybutu <Set> element (zamiast <Add> element) dla Access-Control-Allow-Origin jako jest dozwolona tylko jedna wartość.
  2. 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,