415 Nieobsługiwany typ multimediów – nieobsługiwane kodowanie

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:

  1. Zaloguj się na konto Apigee Edge.
  2. Przełącz się na organizację, w której chcesz zbadać problem:

    Menu organizacji w interfejsie
  3. Otwórz stronę Analiza > Monitorowanie interfejsów API > Zbadaj.
  4. Wybierz przedział czasu, w którym zaobserwowano błędy.
  5. Upewnij się, że filtr Serwer proxy jest ustawiony na wartość Wszystkie.
  6. Porównaj kod błędu z czasem.
  7. Wybierz komórkę z kodem błędu protocol.http.UnsupportedEncoding, jak pokazano poniżej:

    wybrano komórkę z kodem błędu
  8. Informacje o kodzie błędu protocol.http.UnsupportedEncoding są wyświetlane jak poniżej:

  9. Kliknij Wyświetl logi i rozwiń jedno z żądań, w przypadku których wystąpił błąd 415, aby wyświetlić więcej informacji:

  10. W oknie Logi zwróć uwagę na te informacje:
    • Źródło błędu: informuje, że błąd jest zwracany przez apigee lub target.
    • Kod błędu: powinien być zgodny z wartością protocol.http.UnsupportedEncoding.
  11. Jeśli źródło błędu ma wartość apigee, oznacza to, że żądanie zawiera w nagłówku Content-Encoding nieobsługiwane kodowanie.
  12. Jeśli źródłem błędu jest target, oznacza to, że odpowiedź serwera backendu zawierała nieobsługiwane kodowanie w nagłówku Content-Encoding.

Narzędzie do śledzenia

Aby zdiagnozować błąd za pomocą narzędzia do śledzenia:

  1. 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.
  2. Sprawdź, czy włączona jest opcja Show all FlowInfos:

    wyświetl panel opcji, pokaż wszystkie informacje
  3. Wybierz 1 z nieudanych żądań i sprawdź log czasu.
  4. Przejdź przez różne fazy śledzenia i znajdź miejsce błędu.
  5. Błąd pojawia się zwykle w przepływie po fazie żądania wysłanego do serwera docelowego, jak pokazano poniżej:

  6. 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 odpowiedzi Content-Encoding z wartością "utf-8", która nie jest obsługiwanym kodowaniem w Apigee.

  7. Przejdź do fazy AX (rejestrowane dane Analytics) w logu czasu i kliknij ją.
  8. 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:

  9. Zobaczysz wartości X-Apigee-fault-code i X-Apigee-fault-source jako protocol.http.UnsupportedEncoding oraz target, co oznacza, że ten błąd jest spowodowany tym, że w nagłówku odpowiedzi Content-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

  10. Sprawdź, czy używasz łańcucha serwerów proxy, czyli czy serwer docelowy/docelowy punkt końcowy wywołuje w Apigee inny serwer proxy.
    1. Aby to sprawdzić, wróć do fazy Żądanie wysłane do serwera docelowego. Kliknij Pokaż zakręty.

    2. 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.
    3. 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.
    4. 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:

  1. 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.
  2. Sprawdź logi dostępu do NGINX:

    /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

  3. 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 z 415.
  4. Jeśli znajdziesz błędy 415 z kodem X-Apigee-fault-code pasującym do wartości protocol.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

  1. 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.
  2. Jeśli kod błędu to protocol.http.UnsupportedEncoding, a źródło błędu ma wartość apigee lub MP, oznacza to, że żądanie wysłane przez aplikację kliencką zawiera nieobsługiwane kodowanie w nagłówku żądania Content-Encoding.
  3. 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:
    1. 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\""
      
    2. W powyższym komunikacie o błędzie zwróć uwagę, że wartością nieobsługiwanego kodowania jest “UTF-8” jak w faultstring.

      Ponieważ kodowanie “UTF-8” nie jest obsługiwane w Apigee Edge, to żądanie kończy się błędem 415 Unsupported Media Type z kodem błędu: protocol.http.UnsupportedEncoding.

    Rzeczywista prośba

    Użycie rzeczywistego żądania:
    1. Jeśli nie masz dostępu do rzeczywistego żądania wysłanego przez aplikację kliencką, przejdź do sekcji Rozwiązanie.
    2. Jeśli masz dostęp do rzeczywistego żądania wysłanego przez aplikację kliencką, wykonaj te czynności:
      1. Określ wartość przekazaną do nagłówka żądania Content-Encoding.
      2. 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łówka Content- Encoding, który nie jest obsługiwanym kodowaniem w Apigee Edge. Dlatego to żądanie kończy się błędem 415 Unsupported Media Type z kodem błędu: protocol.http.UnsupportedEncoding.

Rozdzielczość

  1. Sprawdź listę kodowania obsługiwanych przez Apigee w sekcji Obsługiwane kodowanie.
  2. 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
  3. W powyższym przykładzie ładunek żądania ma rozszerzenie gz, które wskazuje, że treść musi mieć format gzip. Aby rozwiązać ten problem, wyślij nagłówek żądania jako Content-Encoding: gzip, a ładunek żądania w formacie gzip:

    curl -v "https://HOSTALIAS/v1/testgzip" -H "Content-Encoding: gzip" -X POST -d @request_payload.gz
    

Przyczyna: nieobsługiwane kodowanie w odpowiedzi

Diagnostyka

  1. 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.
  2. 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łówku Content-Encoding.
  3. 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:
    1. 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\""
      
    2. W powyższym komunikacie o błędzie zwróć uwagę, że wartością nieobsługiwanego kodowania jest “UTF-8” jak w faultstring.

      Ponieważ kodowanie “UTF-8” nie jest obsługiwane w Apigee Edge, to żądanie kończy się błędem 415 Unsupported Media Type z kodem błędu: protocol.http.UnsupportedEncoding.

    Narzędzie do śledzenia

    Przy użyciu logu czasu:
    1. Jeśli nie masz logu czasu powiązanego z nieudanym żądaniem, przejdź do sekcji Rozwiązanie.
    2. 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ść

  1. Sprawdź listę kodowania obsługiwanych przez Apigee w sekcji Obsługiwane kodowanie.
  2. 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

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łówku Content-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łędu 415
  • 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