Przeglądasz dokumentację Apigee Edge.
Przejdź do
Dokumentacja Apigee X. informacje.
Krótki opis problemu
Aplikacja kliencka otrzymuje kod stanu HTTP 415 Unsupported Media Type z
kodu błędu protocol.http.UnsupportedEncoding w odpowiedzi na wywołania interfejsu API.
Komunikat o błędzie
Aplikacja kliencka otrzymuje ten kod odpowiedzi:
HTTP/1.1 415 Unsupported Media Type
Możesz też zobaczyć komunikat o błędzie podobny do tego poniżej:
{
"fault":{
"faultstring":"Unsupported Encoding \"UTF-8\"",
"detail":{
"errorcode":"protocol.http.UnsupportedEncoding"
}
}
}Możliwe przyczyny
Ten błąd występuje, jeśli wartość nagłówka Content-Encoding określona w parametrze
żądanie HTTP wysłane przez klienta do Apigee lub odpowiedź HTTP wysłana przez serwer backendu do
Apigee nie zawiera
kodowanie obsługiwane przez Apigee zgodnie ze specyfikacją
.
RFC 7231, sekcja 6.5.13: 415 Nieobsługiwany typ nośnika.
Możliwe przyczyny tego błędu są następujące:
| Przyczyna | Opis | Instrukcje rozwiązywania problemów dotyczące |
|---|---|---|
| W żądaniu użyto nieobsługiwanego kodowania | Nagłówek żądania Content-Encoding zawiera nieobsługiwane kodowanie
od Apigee Edge. |
Użytkownicy chmury publicznej i prywatnej Edge |
| W odpowiedzi użyto nieobsługiwanego kodowania | Nagłówek odpowiedzi Content-Encoding serwera backendu zawiera kodowanie,
Apigee nie jest obsługiwana przez Apigee Edge. |
Użytkownicy chmury publicznej i prywatnej Edge |
Typowe kroki diagnostyki
Aby zdiagnozować błąd, możesz skorzystać z dowolnej z tych metod:
Monitorowanie interfejsów API
Aby zdiagnozować błąd za pomocą monitorowania interfejsów API:
- Zaloguj się na konto Apigee Edge.
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.
- Upewnij się, że filtr Serwer proxy jest ustawiony na Wszystkie.
- Porównaj Kod błędu z czasem.
Wybierz komórkę, która ma kod błędu
protocol.http.UnsupportedEncoding, jak pokazano poniżej:
Informacje o kodzie błędu
protocol.http.UnsupportedEncodingsą wyświetlane w następujący sposób:
Kliknij Wyświetl logi i rozwiń jedno z żądań z błędami (
415). , aby wyświetlić więcej informacji:
- W oknie Logi zwróć uwagę na te informacje:
- Źródło błędu: wskazuje, że błąd jest zwracany przez funkcję
apigeelubtarget. - Kod błędu: powinien odpowiadać kodowi
protocol.http.UnsupportedEncoding.
- Źródło błędu: wskazuje, że błąd jest zwracany przez funkcję
- Jeśli Źródło błędu to
apigee, oznacza to, że żądanie zawiera nieobsługiwane kodowanie w nagłówkuContent-Encoding. - Jeśli źródło błędu to
target, oznacza to, że serwer backendu odpowiedź zawierała nieobsługiwane kodowanie w nagłówkuContent-Encoding.
Narzędzie śledzenia
Aby zdiagnozować błąd za pomocą narzędzia śledzenia:
- Włącz
śledzenie sesji oraz:
- Poczekaj, aż wystąpi błąd
415 Unsupported Media Typelub - Jeśli możesz odtworzyć problem, wywołaj interfejs API, aby odtworzyć problem.
415 Unsupported Media Typebłąd.
- 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 występuje zwykle w procesie po żądaniu wysłania żądania do miejsca docelowego fazę serwera, jak poniżej:
Zwróć uwagę na wartość błędu z śladu.
Powyższy przykładowy log czasu pokazuje błąd jako
Unsupported Encoding "utf-8". Od Apigee zgłasza błąd po wysłaniu żądania do serwera backendu, co wskazuje że serwer backendu wysłał nagłówek odpowiedziContent-Encodingz wartością z"utf-8", co nie jest obsługiwane kodowanie w Apigee.- Przejdź do fazy AX (zarejestrowane dane Analytics) i kliknij ją.
Przewiń w dół do sekcji Nagłówki błędów / odpowiedzi na stronie Szczegóły etapu. i określić, 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 jako
protocol.http.UnsupportedEncodingitarget, co oznacza, że jest spowodowany błędem kodowania, ponieważ nieobsługiwana wartość kodowania"utf-8"została przekazana przez funkcję serwer backendu w nagłówku odpowiedziContent-Encoding.Nagłówki odpowiedzi Wartość X-Apigee-fault-code protocol.http.UnsupportedEncodingX-Apigee-fault-source target- Sprawdź, czy używasz
łańcuch proxy; czyli jeśli serwer docelowy lub docelowy punkt końcowy wywołuje inny
w Apigee.
Aby to sprawdzić, wróć do etapu Żądanie wysłane do serwera docelowego. Kliknij Pokaż skręt.
- Otworzy się okno Curl for Request Sent to Target Server (Adres URL żądania wysłanego do serwera docelowego), w którym możesz określić alias hosta serwera docelowego.
- Jeśli alias hosta serwera docelowego wskazuje alias hosta wirtualnego, jest to serwer proxy
tworzyć łańcuchy. W takim przypadku musisz powtórzyć wszystkie powyższe kroki dla łańcucha proxy, aż
sprawdzić, co tak naprawdę powoduje błąd
415 Unsupported Media Type. - Jeśli alias hosta serwera docelowego wskazuje Twój serwer backendu, oznacza to, serwer backendu przekazuje do Apigee nieobsługiwane kodowanie.
Logi dostępu Nginix
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 błędach HTTP
415. Sprawdź logi dostępu NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log- Wyszukaj wszystkie błędy (
415) w wybranym okresie (jeśli problem wystąpił) w przeszłości) lub jeśli jakieś żądania z415nadal kończą się niepowodzeniem. Jeśli znajdziesz błędy
415w dopasowaniu X-Apigee-fault-code wartośćprotocol.http.UnsupportedEncoding, a następnie wyznacz wartość źródła błędu X-Apigee-fault-source..Przykładowy błąd 415 z dziennika dostępu NGINX:
Powyższy przykładowy wpis logu dostępu NGINX zawiera następujące wartości dla X- Kod błędu Apigee i X-Apigee-fault-source:
Nagłówki odpowiedzi Wartość X-Apigee-fault-code protocol.http.Response405WithoutAllowHeaderX-Apigee-fault-source MPŹródło typu X-Apigee-fault-source może też miećX-Apigee-fault-source wartośćX-Apigee-fault-source .
Przyczyna: nieobsługiwane kodowanie w żądaniu
Diagnostyka
- Określ kod błędu i źródło błędu dla błędu zaobserwowanego za pomocą interfejsu API. Monitorowanie lub logi dostępu NGINX zgodnie z opisem w sekcji Najczęstsze czynności diagnostyczne.
- Jeśli kod błędu to
protocol.http.UnsupportedEncoding, a Błąd Źródło ma wartośćapigeelubMP, co oznacza, że żądanie wysłane przez aplikację kliencką zawiera w nagłówku żądania nieobsługiwane kodowanieContent-Encoding. - Możesz ustalić wartość nieobsługiwanego kodowania przekazanego w żądaniu HTTP
korzystając z jednej z tych metod:
Komunikat o błędzie
Korzystanie z komunikatu o błędzie:Jeśli masz dostęp do pełnego komunikatu o błędzie otrzymanego z Apigee Edge, zapoznaj się z artykułem do:
faultstring.faultstringzawiera wartość nieobsługiwanej funkcji kodowanie.Przykładowy komunikat o błędzie:
"faultstring":"Unsupported Encoding \"UTF-8\""
Zwróć uwagę, że w powyższym komunikacie o błędzie wartość nieobsługiwanego kodowania to
“UTF-8”:faultstring.To żądanie nie jest obsługiwane w Apigee Edge, ponieważ kodowanie
“UTF-8”nie jest obsługiwane kończy się wystąpieniem błędu415 Unsupported Media Typei kodem błędu:protocol.http.UnsupportedEncoding
Rzeczywiste żądanie
Na podstawie rzeczywistego żądania:- Jeśli nie masz dostępu do rzeczywistego żądania wysłanego przez aplikację kliencką, otwórz Rozwiązanie.
- Jeśli masz dostęp do rzeczywistego żądania wysłanego przez aplikację kliencką, wykonaj
następujące kroki:
- Określ wartość przekazywaną do nagłówka żądania
Content-Encoding. - Jeśli wartość przekazywana do nagłówka żądania
Content-Encodingnie wynosi 1 wartości wymienionych w sekcji Obsługiwane kodowanie, to przyczyny tego błędu.Przykładowe żądanie:
curl -v "https://HOSTALIAS/v1/testgzip" -H "Content-Encoding: UTF-8" -X POST -d @request_payload.gz
Powyższe przykładowe żądanie wysyła wartość
"UTF-8"do nagłówkaContent- Encoding, który nie jest Kodowanie obsługiwane w Apigee Edge. Dlatego to żądanie kończy się niepowodzeniem i wyświetlony jest błąd415 Unsupported Media Typez kodem błędu:protocol.http.UnsupportedEncoding
- Określ wartość przekazywaną do nagłówka żądania
Rozdzielczość
- Zapoznaj się z listą kodowania obsługiwanego przez Apigee w Obsługiwane kodowanie
- Upewnij się, że aplikacja kliencka zawsze wysyła to:
- Tylko obsługiwane kodowanie jako wartość nagłówka
Content-Encodingw: prośba - Ładunek żądania w obsługiwanym formacie do Apigee Edge i zgodny z formatem
określono w nagłówku
Content-Encoding
- Tylko obsługiwane kodowanie jako wartość nagłówka
W powyższym przykładzie ładunek żądania ma rozszerzenie
gz, które wskazuje, że treść musi być typugzip. Możesz rozwiązać problem, wysyłając nagłówek żądania jakoContent-Encoding: gziporaz ładunek żądania w formaciegzip:curl -v "https://HOSTALIAS/v1/testgzip" -H "Content-Encoding: gzip" -X POST -d @request_payload.gz
Przyczyna: nieobsługiwane kodowanie w odpowiedzi
Diagnostyka
- Określ kod błędu i źródło błędu dla błędu zaobserwowanego za pomocą interfejsu API. Logi dostępu monitorowania, narzędzia śledzenia lub NGINX opisane w Najczęstsze czynności diagnostyczne.
- Jeśli Źródło błędu ma wartość
target, oznacza to, że odpowiedź wysłana przez serwer backendu zawiera nieobsługiwane kodowanie w poluContent-Encoding. - Możesz określić wartość nieobsługiwanego kodowania przekazanego w odpowiedzi HTTP z
do serwera backendu za pomocą jednej z tych metod:
Komunikat o błędzie
Korzystanie z komunikatu o błędzie:Jeśli masz dostęp do pełnego komunikatu o błędzie otrzymanego z Apigee Edge, przeczytaj
faultstring.faultstringzawiera wartość atrybutu nieobsługiwane kodowanie.Przykładowy komunikat o błędzie:
"faultstring":"Unsupported Encoding \"UTF-8\""
-
Zwróć uwagę, że w powyższym komunikacie o błędzie wartość nieobsługiwanego kodowania to
“UTF-8”:faultstring.Ponieważ
“UTF-8”nie jest obsługiwane w Apigee Edge, ten żądanie kończy się niepowodzeniem i jest wyświetlany błąd415 Unsupported Media Typez kodem błędu:protocol.http.UnsupportedEncoding
Narzędzie śledzenia
Za pomocą logu czasu:- Jeśli nie masz danych śledzenia nieudanego żądania, otwórz Rozwiązanie.
- Jeśli zapiszesz ślad błędu, możesz określić, który z nich
kodowanie przekazywane przez serwer backendu w odpowiedzi
Content-Encodingzgodnie z opisem w narzędziu Ślad.
Rozdzielczość
- Zapoznaj się z listą kodowania obsługiwanego przez Apigee w Obsługiwane kodowanie
- Zadbaj o to, aby serwer backendu zawsze wysyłał te dane:
- Tylko obsługiwane kodowanie jako wartość parametru
Nagłówek
Content-Encodingw żądaniu - Ładunek odpowiedzi w obsługiwanym formacie do Apigee Edge i zgodny z formatem
określono w nagłówku
Content-Encoding
- Tylko obsługiwane kodowanie jako wartość parametru
Nagłówek
Obsługiwane kodowanie
W tej tabeli znajdziesz format kodowania obsługiwany przez Apigee Edge:
| Nagłówek | Kodowanie | Opis |
|---|---|---|
Content-Encoding |
gzip |
Format Unix gzip |
deflate |
Ten format wykorzystuje strukturę zlib z algorytmem kompresji deflate. |
Specyfikacja
Apigee odpowiada odpowiedzią błędu 415 Unsupported Media Type zgodnie z
zgodnie ze specyfikacją RFC:
| Specyfikacja |
|---|
| RFC 7231, sekcja 6.5.13: 415 Nieobsługiwany typ nośnika |
Najważniejsze kwestie
Pamiętaj:
- Jeśli Apigee zwraca błąd
415z powodu przekazania nieobsługiwanego kodowania nagłówekContent-Encodingjako część żądania do interfejsu API, a potem:- Nie będzie można przechwycić logu czasu dla takich żądań.
-
Nie będzie można zmienić formatu ani treści odpowiedzi na błąd wysłanej przez Apigee Edge przy użyciu zasad takich jak RaiseFault i AssignMessage.
Dzieje się tak, ponieważ ten błąd występuje na wczesnych etapach procesora wiadomości przed który można wykonać.
- Jeśli Apigee zwraca błąd
415z powodu przekazania nieobsługiwanego kodowania w nagłówku odpowiedzi serwera backendu, musi zostać naprawiony w z serwera backendu, aby uniknąć tego błędu. Współpracuj z zespołem backendu, aby: napraw ten problem.
Jeśli nadal potrzebujesz wsparcia zespołu pomocy Apigee Edge, przeczytaj artykuł Wymagane jest zbieranie informacji diagnostycznych.
Musi zbierać informacje diagnostyczne
Jeśli nadal potrzebujesz pomocy zespołu pomocy Apigee, przygotuj te informacje 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
curlużyte do odtworzenia błędu415 - 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 serwera proxy interfejsu API
- Plik śledzenia żądań do interfejsu API
Logi dostępu NGINX
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logGdzie: 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