Przeglądasz dokumentację Apigee Edge.
Przejdź do
Dokumentacja Apigee X. informacje.
Krótki opis problemu
Aplikacja kliencka otrzymuje kod stanu HTTP 500 Internal Server Error
z
kod błędu protocol.http.BadPath
w odpowiedzi na wywołania interfejsu API.
Komunikat o błędzie
Aplikacja kliencka otrzymuje ten kod odpowiedzi:
HTTP/1.1 500 Internal Server Error
Możesz też zobaczyć następujący komunikat o błędzie:
{ "fault":{ "faultstring":"Invalid request path", "detail":{ "errorcode":"protocol.http.BadPath" } } }
Możliwe przyczyny
Ten błąd występuje, jeśli URL żądania serwera backendu jest reprezentowany przez zmienną przepływu
target.url
,
zawiera element path
, który zaczyna się od znaku zapytania (?
)
ukośnika (/
), co jest nieprawidłowe.
Zgodnie ze specyfikacją RFC 3986, sekcja 3: Komponenty składni i RFC 3986, sekcja 3.3: Ścieżka:
Składnia identyfikatora URI składa się z tych komponentów:
foo://example.com:8042/over/there?name=ferret#nose \_/ \______________/\_________/ \_________/ \__/ | | | | | scheme authority path query fragment
- Komponent
path
jest wymagany i MUSI zaczynać się od i zawsze musi mieć ukośnik (/
).
Dlatego, jeśli URL żądania serwera backendu zawiera komponent path
zaczynający się
ze znakiem zapytania (?
) zamiast ukośnika (/
), a następnie Apigee.
Edge odpowiada, podając treść 500 Internal Server Error
i kod błędu
protocol.http.BadPath
.
Na przykład: jeśli target.url
zawiera wartość
https://www.mocktarget.apigee.net?json
, ten błąd występuje, ponieważ
Parametr path
jest nieprawidłowy,ponieważ zaczyna się od znaku zapytania
(?
) zamiast ukośnika (/
).
Przyczyna | Opis | Instrukcje rozwiązywania problemów dotyczące |
---|---|---|
Adres URL serwera backendu (target.url) ma nieprawidłową ścieżkę | Komponent ścieżki w adresie URL serwera backendu reprezentowany przez zmienną przepływu
Symbol target.url zaczyna się od znaku zapytania (? ) zamiast znaku „Dalej”
ukośnik (/ ). |
Użytkownicy chmury publicznej i prywatnej Edge |
Typowe kroki diagnostyki
Użyj jednego z tych narzędzi lub metod, aby zdiagnozować ten błąd:
Monitorowanie interfejsów API
Procedura 1. Korzystanie z monitorowania interfejsów API
Aby zdiagnozować błąd za pomocą monitorowania interfejsów API:
- Zaloguj się w interfejsie Apigee Edge jako użytkownik z uprawnieniami odpowiednią rolę.
Przełącz się na organizację, w której chcesz zbadać problem.
- Przejdź do przycisku Analiza > Monitorowanie interfejsów API > Zbadaj stronę.
- Wybierz okres, w którym zaobserwowano błędy.
Porównaj Kod błędu z czasem.
Wybierz komórkę, która ma podany kod błędu
protocol.http.BadPath
poniżej:Informacje o kodzie błędu
protocol.http.BadPath
są wyświetlane jako poniżej:Kliknij Wyświetl logi i rozwiń wiersz nieudanego żądania.
- W oknie Logi zwróć uwagę na te informacje:
- Kod stanu:
500
- Źródło błędu:
target
- Kod błędu:
protocol.http.BadPath
- Kod stanu:
- Jeśli Źródło błędu to
target
, a Kod błędu –protocol.http.BadPath
, oznacza to, że adres URL serwera backendu zawiera ciąg nieprawidłowa ścieżka.
Śledzenie
Procedura 2. Używanie narzędzia śledzenia
Aby zdiagnozować błąd za pomocą narzędzia śledzenia:
- Włącz sesję śledzenia i wykonaj jedną z tych czynności:
- Poczekaj, aż wystąpi błąd
500 Internal Server Error
lub - Jeśli możesz odtworzyć problem, wykonaj wywołanie interfejsu API, aby odtworzyć problem.
500 Internal Server Error
- Poczekaj, aż wystąpi błąd
Sprawdź, czy opcja Show all FlowInfos jest włączona:
- Wybierz jedno z nieudanych żądań i sprawdź log czasu.
- Przejdź przez różne fazy śledzenia i znajdź miejsca, w których wystąpił błąd.
Błąd pojawia się zwykle w ramach procesu po rozpoczęciu docelowego przepływu żądań . faza, jak poniżej:
Zwróć uwagę na wartość błędu ze logu czasu:
Błąd: nieprawidłowa ścieżka żądania
Błąd jest zgłaszany przez Apigee Edge po rozpoczęciu docelowego przepływu żądań oznacza, że adres URL serwera backendu ma nieprawidłową ścieżkę. To spowoduje najczęściej występuje, jeśli zmienna przepływu
target.url
(która reprezentuje adres URL dla serwera backendu) w Apigee Edge prawdopodobnie została zaktualizowana o nieprawidłową ścieżkę przez jedną z zasad w docelowym przepływie żądań.- W każdym procesie odwrotnym sprawdź sekcję Zmienne przeczytane i przypisane. od procesu błędu do fazy rozpoczęcia docelowego przepływu żądań.
- Ustal zasadę, gdzie zmienna przepływu
target.url
była zaktualizowano:Przykładowy log czasu pokazujący, jak zasada JavaScript zaktualizowała zmienną przepływu
target.url:
W przykładowym logu czasu powyżej zwróć uwagę na wartość zmiennej przepływu Plik
target.url
w zasadzie JavaScript o nazwieJS- SetTargetURL
został zaktualizowany w następujący sposób:target.url : https://mocktarget.apigee.net?json
- Pamiętaj, że wartość w polu
target.url
składa się z tych komponentów:- .
- schemat:
https
- autoryzacja:
mocktarget.apigee.net
- ścieżka:
?json
- schemat:
- Komponent ścieżka zaczyna się od znaku zapytania (
?
) zamiast ukośnika (/
), pojawia się błądInvalid request path
. - Przejdź do fazy AX (zarejestrowane dane Analytics) i kliknij ją.
Przewiń w dół do sekcji Phase Details – Error Headers (Nagłówki błędów) i określ wartość wartości X-Apigee-fault-code i X-Apigee-fault-source, jak pokazano poniżej:
Zobaczysz wartości X-Apigee-fault-code i X-Apigee-fault-source jak
protocol.http.BadPath
itarget
, wskazujący, że ten błąd jest spowodowany nieprawidłową ścieżką adresu URL serwera backendu.Nagłówki odpowiedzi Wartość X-Apigee-fault-code protocol.http.BadPath
X-Apigee-fault-source target
NGINX
Procedura 3. Używanie logów dostępu NGINX
Aby zdiagnozować błąd przy użyciu logów dostępu NGINX:
- Jeśli jesteś użytkownikiem Private Cloud, możesz użyć logów dostępu NGINX, aby określić
Kluczowe informacje o HTTP
500 Internal Server Error
. Sprawdź logi dostępu NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
- Wyszukaj błędy (
500
) z kodem błęduprotocol.http.BadPath
w określonym czasie (jeśli problem wystąpił w wcześniejsze) lub jeśli jakieś żądania z usługą500
nadal kończą się niepowodzeniem. Jeśli znajdziesz błędy
500
w dopasowaniu X-Apigee-fault-code wartośćprotocol.http.BadPath
, a następnie ustal wartość X- Źródło usterek Apigee.Przykładowy błąd 500 z dziennika dostępu NGINX:
Powyższy przykładowy wpis z logu dostępu NGINX zawiera następujące wartości dla X-Apigee- kod błędu i X-Apigee-fault-source:
Nagłówki Wartość X-Apigee-fault-code protocol.http.BadPath
X-Apigee-fault-source target
Zwróć uwagę, że wartości X-Apigee-fault-code i X-Apigee-fault-source to
protocol.http.BadPath
itarget
, co oznacza że ten błąd jest spowodowany tym, że adres URL serwera backendu ma nieprawidłową ścieżkę.
Przyczyna: adres URL serwera backendu (target.url) ma nieprawidłową ścieżkę
Diagnostyka
- Określ kod błędu i źródło błędu dla
500 Internal Server Error
przy użyciu monitorowania interfejsów API, narzędzia Trace Tool lub logów dostępu NGINX, jak opisano w sekcji Najczęstsze czynności diagnostyczne. - Jeśli Kod błędu to
protocol.http.BadPath
, a Źródło błędu – wartośćtarget
, oznacza to, że adres URL serwera backendu zawiera nieprawidłowy parametr . URL serwera backendu jest w Apigee reprezentowany przez zmienną przepływu
target.url
Edge. Ten błąd zwykle występuje przy próbie zaktualizowania adresu URL serwera backendu (target.url
) dynamicznie przy użyciu zasad (w serwer proxy/współdzielony) w procesie żądania docelowego tak, aby zawierał nieprawidłową ścieżkę.Sprawdź, czy zmienna przepływu
target.url
rzeczywiście zawiera nieprawidłową path i źródło jego wartości, korzystając z jednej z tych metod:Śledzenie
Korzystanie z narzędzia Trace
Jeśli masz zarejestrowany ślad tego błędu, wykonaj czynności opisane w za pomocą narzędzia Trace .
- Sprawdź, czy ścieżka
target.url
ma nieprawidłową ścieżkę, czyli zaczyna się ze znakiem zapytania (?
) zamiast ukośnika (/
). Jeśli tak, dowiedz się, która zasada zmodyfikowała lub zaktualizowała wartość
target.url
, aby uwzględnić nieprawidłową ścieżkę.Przykładowy log czasu pokazujący, jak zasada JavaScript zaktualizowała zmienną przepływu
target.url
- W tym przykładowym logu czasu widać, że zasada JavaScript zmieniła lub zaktualizowała wartość
target.url
, tak aby zawierała nieprawidłową ścieżkę. - Pamiętaj, że
target.url
zawiera te komponenty:- .
- schemat:
https
- autoryzacja:
mocktarget.apigee.net
- ścieżka:
?json
Ścieżka zaczyna się od znaku zapytania (
?
), a nie od znaku „Dalej”. ukośnik (/
), dlatego jest nieprawidłowy. - schemat:
Logi
Używanie logów na serwerze logów
- Jeśli nie ma śladów tego błędu (problem przejściowy), sprawdź, czy
zapisałeś informacje o wartości zmiennej Flow
target.url
przy użyciu zasad takich jak MessageLogging lub . zasady ServiceCallout na serwerze logów. - Jeśli masz dzienniki, przejrzyj je
- Sprawdź, czy ścieżka
target.url
jest nieprawidłowa. - Zobacz, czy możesz określić informacje o tym, które zasady zostały zmodyfikowane
Plik
target.url
zawiera nieprawidłową ścieżkę
- Sprawdź, czy ścieżka
proxy interfejsu API
Sprawdzanie uszkodzonego serwera proxy interfejsu API
Jeśli nie masz logu czasu ani logów dla tego błędu, sprawdź interfejs API, w którym wystąpił błąd serwera proxy, by określić, co zmodyfikowało lub zaktualizowało zmienną przepływu
target.url
zawiera nieprawidłową ścieżkę. Sprawdź poniższe kwestie:- Zasada w obrębie serwera proxy interfejsu API
- Wszystkie współdzielone przepływy wywoływane z serwera proxy
- Sprawdź, czy ścieżka
Dokładnie sprawdź konkretną zasadę (np. AssignMessage lub JavaScript), która modyfikuje lub aktualizuje zmienną przepływu
target.url
i określa przyczynę dla aktualizujesztarget.url
, aby miał nieprawidłową ścieżkę.Oto kilka przykładowych zasad, które aktualizują zmienną przepływu
target.url
zawiera nieprawidłową ścieżkę prowadzącą do tego błędu.Przykład 1
Przykład 1. Aktualizacja zmiennej
target.url
przez zasadę JavaScriptuvar url = "https://mocktarget.apigee.net?json" context.setVariable("target.url", url);
W powyższym przykładzie zwróć uwagę, że zmienna przepływu
target.url
została zaktualizowana z wartościąhttps://mocktarget.apigee.net?json
zawartą w innej zmiennaurl.
Pamiętaj, że wartość
url
składa się z tych komponentów:- schemat:
https
- autoryzacja:
mocktarget.apigee.net
- ścieżka:
?json
Ścieżka zaczyna się od znaku zapytania (
?
) zamiast ukośnika (/
), co jest nieprawidłowe. Dlatego Apigee Edge zwraca500 Internal Server Error
z kodem błęduprotocol.http.BadPath
.Przykład 2
Przykład 2. Aktualizacja zmiennej
target.url
przez zasadę JavaScriptu na podstawie wartości w nagłówku żądaniavar path = context.getVariable("request.header.Path"); var url = "https://mocktarget.apigee.net" + path context.setVariable("target.url", url);
W powyższym przykładzie zwróć uwagę, że zmienna przepływu
target.url
została zaktualizowana przez połączenie wartościhttps://mocktarget.apigee.net
zawartej wurl
i wartości innej zmiennejpath
, , której wartość jest pobierana zrequest.header.Path.
Jeśli masz dostęp do rzeczywistego żądania lub logu czasu, możesz sprawdzić rzeczywistą wartość przekazano do
request.header.Path
.Przykładowe żądanie przesłane przez użytkownika
curl -v https://HOST_ALIAS/v1/myproxy -H "Authorization: Bearer <token> -H "Path: ?user"
W tym przykładzie ścieżka nagłówka nie jest wysyłana w ramach żądania. Dlatego też wartość zmiennej
path
w zasadzie JavaScript tonull
.Przykłady:
url = https://mocktarget.apigee.net + path
url = https://mocktarget.apigee.net + "?user"
target.url = https://mocktarget.apigee.net?user
Pamiętaj, że wartość
target.url
składa się z tych komponentów:- schemat:
https
- autoryzacja:
mocktarget.apigee.net
- ścieżka:
?user
Ścieżka zaczyna się od znaku zapytania (
?
) zamiast ukośnika (/
), co jest nieprawidłowe. Z tego powodu Apigee Edge zwraca wartość500 Internal Server Error
z kodem błęduprotocol.http.BadPath
.Przykład 3
Przykład 3. Aktualizacja zasady AssignMessage z aktualizacją zmiennej
target.url
<AssignMessage async="false" continueOnError="false" enabled="true" name="AM-SetTargetURL"> <DisplayName>AM-SetTargetURL</DisplayName> <AssignVariable> <Name>target.url</Name> <Value>https://mocktarget.apigee.net?echo</Value> </AssignVariable> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Pamiętaj, że wartość
url
obejmuje te komponenty:- schemat:
https
- autoryzacja:
mocktarget.apigee.net
- ścieżka:
?echo
W tym przykładzie ścieżka zaczyna się od znaku zapytania (
?
) zamiast ukośnika (/
), co jest nieprawidłowe. Dlatego Apigee Edge zwraca wartość500 Internal Server Error
z kodem błęduprotocol.http.BadPath
- schemat:
Rozdzielczość
Zgodnie ze specyfikacją adresu URL
RFC 3986, sekcja 3: Komponenty składni, komponent path
jest wymagany
i MUSI zawsze zaczynać się od "/". Aby rozwiązać ten problem:
- Sprawdź, czy adres URL serwera backendu reprezentowany przez zmienną przepływu
target.url
ma zawsze prawidłową ścieżkę i zawsze zaczyna się od ukośnik prawy (/
).- W niektórych przypadkach ścieżka może nie zawierać nazwy zasobu. Sprawdź, czy tag
ścieżka musi zawierać co najmniej ukośnik (
/
). - Jeśli używasz innych zmiennych do określenia wartości zmiennej przepływu
target.url
, upewnij się, że inne zmienne nie mają podanego parametru nieprawidłową ścieżkę. - Jeśli wykonujesz operacje na ciągach znaków, aby określić wartość zmiennej przepływu
target.url
, a następnie sprawdź, czy wynik lub wynik ciągu znaków operacje nie mają nieprawidłowej ścieżki.
- W niektórych przypadkach ścieżka może nie zawierać nazwy zasobu. Sprawdź, czy tag
ścieżka musi zawierać co najmniej ukośnik (
W przykładach opisanych powyżej możesz rozwiązać ten problem w sposób opisany poniżej:
Przykład 1
Przykład 1. Aktualizacja zmiennej
target.url
przez zasadę JavaScriptuUżyj ukośnika (
/
) zamiast znaku zapytania (?
) wurl
, aby rozwiązać ten problem, jak pokazano poniżej:var url = "https://mocktarget.apigee.net/json" context.setVariable("target.url", url);
Przykład 2
Przykład 2. Aktualizacja zmiennej
target.url
przez zasadę JavaScriptu na podstawie wartości w nagłówku żądaniavar path = context.getVariable("request.header.Path"); var url = "https://mocktarget.apigee.net" + path context.setVariable("target.url", url);
Upewnij się, że przekazujesz prawidłową ścieżkę, np.
/user
jako część żądania nagłówekPath
, aby rozwiązać ten problem, jak pokazano poniżej:Przykładowe żądanie:
curl -v https://HOST_ALIAS/v1/myproxy -H "Authorization: Bearer <token> -H "Path: /user"
Przykład 3
Przykład 3. Aktualizowanie zmiennej
target.url
przez zasadę AssignMessageDodaj prawidłową ścieżkę w elemencie
<Value>
zasady AssignMessage. Oznacza to, że znak zapytania (?
) zastąp ukośnik prawy (/
) w elemencie<Value>
i ustaw wartośćhttps://mocktarget.apigee.net/echo
, aby rozwiązać ten problem, jak pokazano poniżej:<AssignMessage async="false" continueOnError="false" enabled="true" name="AM-SetTargetURL"> <DisplayName>AM-SetTargetURL</DisplayName> <AssignVariable> <Name>target.url</Name> <Value>https://mocktarget.apigee.net/echo</Value> </AssignVariable> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Specyfikacja
Apigee Edge oczekuje, że
path
komponent w adresie URL serwera backendu MUSI zawsze zaczynać się od ukośnika (/
) w następujący sposób: specyfikacje:Specyfikacja RFC 3986, sekcja 3: komponenty składni RFC 3986, sekcja 3.3: ścieżka Jeśli nadal potrzebujesz pomocy zespołu pomocy Apigee, przejdź do sekcji Musisz zebrać informacje diagnostyczne.
Musi zbierać informacje diagnostyczne
Jeśli po wykonaniu powyższych czynności problem nie ustąpi, zwróć uwagę na informacje diagnostyczne, a następnie skontaktuj się z zespołem pomocy Apigee Edge:
Jeśli jesteś użytkownikiem Public Cloud, podaj te informacje:
- Nazwa organizacji
- Nazwa środowiska
- Nazwa serwera proxy interfejsu API
- Wykonaj polecenie
curl
użyte do odtworzenia elementu500 Internal Server Error
z kodem błęduprotocol.http.BadPath
- Plik śledzenia żądań do interfejsu API
Jeśli jesteś użytkownikiem Private Cloud, podaj te informacje:
- Pełny komunikat o błędzie zaobserwowany dla nieudanych żądań
- Nazwa środowiska
- Pakiet serwerów proxy interfejsu API
- Plik śledzenia żądań do interfejsu API
Logi dostępu NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
Gdzie: ORG, ENV i PORT# są zastępowane przez wartości rzeczywiste.
- Dzienniki systemowe procesora wiadomości
/opt/apigee/var/log/edge-message- processor/logs/system.log
Pliki referencyjne