Przeglądasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X. Informacje
Krótki opis problemu
W odpowiedzi na wywołania interfejsu API aplikacja kliencka otrzymuje kod stanu HTTP 415 Unsupported Media Type
z kodem błędu protocol.http.UnsupportedEncoding
.
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:
{ "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 żądaniu HTTP wysłanym przez klienta do Apigee lub w odpowiedzi HTTP wysłanej przez serwer backendu do Apigee nie zawiera kodowania obsługiwanego przez Apigee zgodnie ze specyfikacją
RFC 7231, sekcja 6.5.13: 415 Nieobsługiwany typ nośnika.
Możliwe przyczyny tego błędu:
Przyczyna | Opis | Instrukcje rozwiązywania problemów dotyczące |
---|---|---|
Nieobsługiwane kodowanie w żądaniu | Nagłówek żądania Content-Encoding zawiera kodowanie nieobsługiwane przez Apigee Edge. |
Użytkownicy chmury publicznej i prywatnej usługi Edge |
Nieobsługiwane kodowanie w odpowiedzi | Nagłówek odpowiedzi serwera backendu Content-Encoding zawiera kodowanie, które nie jest obsługiwane przez Apigee Edge. |
Użytkownicy chmury publicznej i prywatnej usługi Edge |
Najczęstsze kroki diagnostyki
Aby zdiagnozować błąd, możesz użyć dowolnej z następujących metod:
Monitorowanie interfejsów API
Aby zdiagnozować błąd za pomocą monitorowania interfejsu API:
- Zaloguj się na konto Apigee Edge.
Przełącz się na organizację, w której chcesz zbadać problem:
- Otwórz stronę Analiza > Monitorowanie interfejsów API > Zbadaj.
- Wybierz przedział czasu, w którym zaobserwowano błędy.
- Upewnij się, że filtr Serwer proxy jest ustawiony na wartość Wszystkie.
- Porównaj kod błędu z czasem.
Wybierz komórkę z kodem błędu
protocol.http.UnsupportedEncoding
, jak pokazano poniżej:Informacje o kodzie błędu
protocol.http.UnsupportedEncoding
są wyświetlane jak poniżej:Kliknij Wyświetl logi i rozwiń jedno z żądań, w przypadku których wystąpił błąd
415
, aby wyświetlić więcej informacji:- W oknie Logi zwróć uwagę na te informacje:
- Źródło błędu: informuje, że błąd jest zwracany przez
apigee
lubtarget
. - Kod błędu: powinien być zgodny z wartością
protocol.http.UnsupportedEncoding
.
- Źródło błędu: informuje, że błąd jest zwracany przez
- Jeśli źródło błędu ma wartość
apigee
, oznacza to, że żądanie zawiera w nagłówkuContent-Encoding
nieobsługiwane kodowanie. - Jeśli źródłem błędu jest
target
, oznacza to, że odpowiedź serwera backendu zawierała nieobsługiwane kodowanie w nagłówkuContent-Encoding
.
Narzędzie do śledzenia
Aby zdiagnozować błąd za pomocą narzędzia do śledzenia:
- Włącz
sesję śledzenia, a potem:
- Poczekaj na wystąpienie błędu
415 Unsupported Media Type
lub - Jeśli możesz odtworzyć problem, wykonaj wywołanie interfejsu API, aby odtworzyć błąd
415 Unsupported Media Type
.
- Poczekaj na wystąpienie błędu
Sprawdź, czy włączona jest opcja Show all FlowInfos:
- Wybierz 1 z nieudanych żądań i sprawdź log czasu.
- Przejdź przez różne fazy śledzenia i znajdź miejsce błędu.
Błąd pojawia się zwykle w przepływie po fazie żądania wysłanego do serwera docelowego, jak pokazano poniżej:
Zapisz wartość błędu ze śledzenia.
Powyższy przykładowy log czasu pokazuje błąd jako
Unsupported Encoding "utf-8"
. Ponieważ błąd jest zgłaszany przez Apigee po wysłaniu żądania do serwera backendu, wskazuje to, że serwer backendu wysłał nagłówek odpowiedziContent-Encoding
z wartością"utf-8"
, która nie jest obsługiwanym kodowaniem w Apigee.- Przejdź do fazy AX (rejestrowane dane Analytics) w logu czasu i kliknij ją.
Przewiń w dół do sekcji Error / Response Headers (Nagłówki błędów / odpowiedzi odpowiedzi) w panelu Szczegóły fazy i ustal 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.UnsupportedEncoding
oraztarget
, co oznacza, że ten błąd jest spowodowany tym, że w nagłówku odpowiedziContent-Encoding
przekazała nieobsługiwaną wartość kodowania"utf-8"
.Nagłówki odpowiedzi Wartość X-Apigee-fault-code protocol.http.UnsupportedEncoding
X-Apigee-fault-source target
- Sprawdź, czy używasz
łańcucha serwerów proxy, czyli czy serwer docelowy/docelowy punkt końcowy wywołuje w Apigee inny serwer proxy.
Aby to sprawdzić, wróć do fazy Żądanie wysłane do serwera docelowego. Kliknij Pokaż zakręty.
- Otworzy się okno Curl for Request Sent to Target Server (Curl na żądanie wysłane 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 łańcuch serwerów proxy. W tym przypadku musisz powtórzyć wszystkie powyższe kroki dla połączonego serwera proxy, aż ustalisz, co faktycznie powoduje błąd
415 Unsupported Media Type
. - Jeśli alias hosta serwera docelowego wskazuje Twój serwer backendu, oznacza to, że serwer backendu przekazuje nieobsługiwane kodowanie do Apigee.
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żywać logów dostępu NGINX do określania kluczowych informacji o błędach HTTP
415
. Sprawdź logi dostępu do NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
- Wyszukaj błędy
415
o określonym czasie trwania (jeśli problem wystąpił w przeszłości) lub jeśli są jakieś żądania, które nadal kończą się niepowodzeniem z415
. Jeśli znajdziesz błędy
415
z kodem X-Apigee-fault-code pasującym do wartościprotocol.http.UnsupportedEncoding
, sprawdź wartość źródła błędów X-Apigee-fault-code .Przykładowy błąd 415 z dziennika dostępu NGINX:
Powyższy przykładowy wpis z logu dostępu NGINX ma następujące wartości kodu X- Apigee-fault-code i X-Apigee-fault-source:
Nagłówki odpowiedzi Wartość X-Apigee-fault-code protocol.http.Response405WithoutAllowHeader
X-Apigee-fault-source MP
Element 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 w logach dostępu API Monitoring lub NGINX zgodnie z opisem w częstych krokach diagnostyki.
- Jeśli kod błędu to
protocol.http.UnsupportedEncoding
, a źródło błędu ma wartośćapigee
lubMP
, oznacza to, że żądanie wysłane przez aplikację kliencką zawiera nieobsługiwane kodowanie w nagłówku żądaniaContent-Encoding
. - Możesz określić wartość nieobsługiwanego kodowania przekazywanego 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 dokumentem
faultstring
.faultstring
zawiera wartość nieobsługiwanego kodowania końcowego.Przykładowy komunikat o błędzie:
"faultstring":"Unsupported Encoding \"UTF-8\""
W powyższym komunikacie o błędzie zwróć uwagę, że wartością nieobsługiwanego kodowania jest
“UTF-8”
jak wfaultstring
.Ponieważ kodowanie
“UTF-8”
nie jest obsługiwane w Apigee Edge, to żądanie kończy się błędem415 Unsupported Media Type
z kodem błędu:protocol.http.UnsupportedEncoding
.
Rzeczywista prośba
Użycie rzeczywistego żądania:- Jeśli nie masz dostępu do rzeczywistego żądania wysłanego przez aplikację kliencką, przejdź do sekcji Rozwiązanie.
- Jeśli masz dostęp do rzeczywistego żądania wysłanego przez aplikację kliencką, wykonaj te czynności:
- Określ wartość przekazaną do nagłówka żądania
Content-Encoding.
- Jeśli wartość przekazana do nagłówka żądania
Content-Encoding
nie jest jedną z wartości wymienionych w sekcji Obsługiwane kodowanie, to jest przyczyną 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 obsługiwanym kodowaniem w Apigee Edge. Dlatego to żądanie kończy się błędem415 Unsupported Media Type
z kodem błędu:protocol.http.UnsupportedEncoding
.
- Określ wartość przekazaną do nagłówka żądania
Rozdzielczość
- Sprawdź listę kodowania obsługiwanych przez Apigee w sekcji Obsługiwane kodowanie.
- Sprawdź, czy aplikacja kliencka zawsze wysyła te informacje:
- Tylko obsługiwane kodowanie jako wartość nagłówka
Content-Encoding
w żądaniu - Ładunek żądania w obsługiwanym formacie do Apigee Edge i pasuje do formatu określonego 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 mieć formatgzip
. Aby rozwiązać ten problem, wyślij nagłówek żądania jakoContent-Encoding: gzip
, a ł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
- Znajdź kod błędu i źródło błędu dla błędu zaobserwowanego przy użyciu logów dostępu interfejsu API Monitoring, narzędzia śledzenia lub NGINX zgodnie z opisem w częstych krokach diagnostyki.
- Jeśli źródło błędu ma wartość
target
, oznacza to, że odpowiedź wysłana przez serwer backendu zawiera nieobsługiwane kodowanie w nagłówkuContent-Encoding
. - Możesz określić wartość nieobsługiwanego kodowania przekazanego w odpowiedzi HTTP z serwera backendu, 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 dokumentem
faultstring
.faultstring
zawiera wartość nieobsługiwanego kodowania.Przykładowy komunikat o błędzie:
"faultstring":"Unsupported Encoding \"UTF-8\""
-
W powyższym komunikacie o błędzie zwróć uwagę, że wartością nieobsługiwanego kodowania jest
“UTF-8”
jak wfaultstring
.Ponieważ kodowanie
“UTF-8”
nie jest obsługiwane w Apigee Edge, to żądanie kończy się błędem415 Unsupported Media Type
z kodem błędu:protocol.http.UnsupportedEncoding
.
Narzędzie do śledzenia
Przy użyciu logu czasu:- Jeśli nie masz logu czasu powiązanego z nieudanym żądaniem, przejdź do sekcji Rozwiązanie.
- Jeśli udało Ci się zarejestrować log czasu błędu, możesz ustalić nieobsługiwane kodowanie przekazywane przez serwer backendu jako część nagłówka odpowiedzi
Content-Encoding
zgodnie z opisem w narzędziu śledzenia.
Rozdzielczość
- Sprawdź listę kodowania obsługiwanych przez Apigee w sekcji Obsługiwane kodowanie.
- Sprawdź, czy serwer backendu zawsze wysyła:
- Tylko obsługiwane kodowanie jako wartość nagłówka
Content-Encoding
w żądaniu - Ładunek odpowiedzi w obsługiwanym formacie Apigee Edge i pasuje do formatu określonego w nagłówku
Content-Encoding
- Tylko obsługiwane kodowanie jako wartość nagłówka
Obsługiwane kodowanie
W poniższej tabeli znajdziesz listę formatów kodowania obsługiwanych 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 w odpowiedzi wysyła odpowiedź o błędzie 415 Unsupported Media Type
zgodnie z tą 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
415
z powodu nieobsługiwanego kodowania przekazanego w nagłówkuContent-Encoding
w żądaniu do interfejsu API:- W przypadku takich żądań nie będziesz mieć możliwości zarejestrowania logu czasu.
-
Nie będzie można zmienić formatu ani treści odpowiedzi o błędzie wysłanej przez Apigee Edge przy użyciu takich zasad jak romotingFault, AssignMessage.
Wynika to z tego, że ten błąd występuje na wczesnym etapie procesu przetwarzania wiadomości, zanim będzie można wykonać jakiekolwiek zasady.
- Jeśli Apigee zwraca błąd
415
z powodu nieobsługiwanego kodowania przekazanego w nagłówku odpowiedzi z serwera backendu, trzeba go naprawić na serwerze backendu, aby uniknąć tego błędu. Aby rozwiązać ten problem, skontaktuj się z zespołem backendu.
Jeśli nadal potrzebujesz pomocy zespołu pomocy Apigee Edge, przejdź do sekcji Wymagane jest zbieranie informacji diagnostycznych.
Musisz zebrać informacje diagnostyczne
Jeśli nadal potrzebujesz pomocy zespołu pomocy Apigee, zbierz poniższe informacje diagnostyczne, a następnie skontaktuj się z zespołem pomocy Apigee Edge:
Jeśli jesteś użytkownikiem chmury publicznej, podaj te informacje:
- Nazwa organizacji
- Nazwa środowiska
- Nazwa serwera proxy interfejsu API
- Wykonaj polecenie
curl
użyte do odtworzenia błędu415
- Plik śledzenia żądań interfejsu API
Jeśli jesteś użytkownikiem Private Cloud, podaj te informacje:
- Zaobserwowany pełny komunikat o błędzie dotyczący nieudanych żądań
- Nazwa środowiska
- Pakiet proxy API
- Plik śledzenia żądań 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 rzeczywistymi wartościami.
- Dzienniki systemowe procesora wiadomości
/opt/apigee/var/log/edge-message- processor/logs/system.log