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

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:

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

    menu organizacji ui
  3. Przejdź do przycisku Analiza > Monitorowanie interfejsów API > Zbadaj stronę.
  4. Wybierz okres, w którym zaobserwowano błędy.
  5. Upewnij się, że filtr Serwer proxy jest ustawiony na Wszystkie.
  6. Porównaj Kod błędu z czasem.
  7. Wybierz komórkę, która ma kod 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 w następujący sposób:

  9. Kliknij Wyświetl logi i rozwiń jedno z żądań z błędami (415). , aby wyświetlić więcej informacji:

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

Narzędzie śledzenia

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

  1. Włącz śledzenie sesji oraz:
    • Poczekaj, aż wystąpi błąd 415 Unsupported Media Type lub
    • Jeśli możesz odtworzyć problem, wywołaj interfejs API, aby odtworzyć problem. 415 Unsupported Media Type błąd.
  2. Sprawdź, czy opcja Show all FlowInfos jest włączona:

    wyświetl panel opcji, pokaż wszystkie informacje o przepływie
  3. Wybierz jedno z nieudanych żądań i sprawdź log czasu.
  4. Przejdź przez różne fazy śledzenia i znajdź miejsca, w których wystąpił błąd.
  5. Błąd występuje zwykle w procesie po żądaniu wysłania żądania do miejsca docelowego fazę serwera, jak poniżej:

  6. 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 odpowiedzi Content-Encoding z wartością z "utf-8", co nie jest obsługiwane kodowanie w Apigee.

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

  9. Zobaczysz wartości X-Apigee-fault-code i X-Apigee-fault-source jako protocol.http.UnsupportedEncoding i target, 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 odpowiedzi Content-Encoding.

    Nagłówki odpowiedzi Wartość
    X-Apigee-fault-code protocol.http.UnsupportedEncoding
    X-Apigee-fault-source target

  10. Sprawdź, czy używasz łańcuch proxy; czyli jeśli serwer docelowy lub docelowy punkt końcowy wywołuje inny w Apigee.
    1. Aby to sprawdzić, wróć do etapu Żądanie wysłane do serwera docelowego. Kliknij Pokaż skręt.

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

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

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

  3. Wyszukaj wszystkie błędy (415) w wybranym okresie (jeśli problem wystąpił) w przeszłości) lub jeśli jakieś żądania z 415 nadal kończą się niepowodzeniem.
  4. Jeśli znajdziesz błędy 415 w 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.Response405WithoutAllowHeader
    X-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

  1. 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.
  2. Jeśli kod błędu to protocol.http.UnsupportedEncoding, a Błąd Źródło ma wartość apigee lub MP, co oznacza, że żądanie wysłane przez aplikację kliencką zawiera w nagłówku żądania nieobsługiwane kodowanie Content-Encoding.
  3. 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:
    1. Jeśli masz dostęp do pełnego komunikatu o błędzie otrzymanego z Apigee Edge, zapoznaj się z artykułem do: faultstring. faultstring zawiera wartość nieobsługiwanej funkcji kodowanie.

      Przykładowy komunikat o błędzie:

      "faultstring":"Unsupported Encoding \"UTF-8\""
    2. 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łędu 415 Unsupported Media Type i kodem błędu: protocol.http.UnsupportedEncoding

    Rzeczywiste żądanie

    Na podstawie rzeczywistego żądania:
    1. Jeśli nie masz dostępu do rzeczywistego żądania wysłanego przez aplikację kliencką, otwórz Rozwiązanie.
    2. Jeśli masz dostęp do rzeczywistego żądania wysłanego przez aplikację kliencką, wykonaj następujące kroki:
      1. Określ wartość przekazywaną do nagłówka żądania Content-Encoding.
      2. Jeśli wartość przekazywana do nagłówka żądania Content-Encoding nie 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łówka Content- Encoding, który nie jest Kodowanie obsługiwane w Apigee Edge. Dlatego to żądanie kończy się niepowodzeniem i wyświetlony jest błąd 415 Unsupported Media Type z kodem błędu: protocol.http.UnsupportedEncoding

Rozdzielczość

  1. Zapoznaj się z listą kodowania obsługiwanego przez Apigee w Obsługiwane kodowanie
  2. Upewnij się, że aplikacja kliencka zawsze wysyła to:
    • Tylko obsługiwane kodowanie jako wartość nagłówka Content-Encoding w: prośba
    • Ładunek żądania w obsługiwanym formacie do Apigee Edge i zgodny z formatem określono w nagłówku Content-Encoding
  3. W powyższym przykładzie ładunek żądania ma rozszerzenie gz, które wskazuje, że treść musi być typu gzip. Możesz rozwiązać problem, wysyłając nagłówek żądania jako Content-Encoding: gzip oraz ł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. 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.
  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 polu Content-Encoding.
  3. 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:
    1. Jeśli masz dostęp do pełnego komunikatu o błędzie otrzymanego z Apigee Edge, przeczytaj faultstring. faultstring zawiera wartość atrybutu nieobsługiwane kodowanie.

      Przykładowy komunikat o błędzie:

      "faultstring":"Unsupported Encoding \"UTF-8\""
    2. 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łąd 415 Unsupported Media Type z kodem błędu: protocol.http.UnsupportedEncoding

    Narzędzie śledzenia

    Za pomocą logu czasu:
    1. Jeśli nie masz danych śledzenia nieudanego żądania, otwórz Rozwiązanie.
    2. Jeśli zapiszesz ślad błędu, możesz określić, który z nich kodowanie przekazywane przez serwer backendu w odpowiedzi Content-Encoding zgodnie z opisem w narzędziu Ślad.

Rozdzielczość

  1. Zapoznaj się z listą kodowania obsługiwanego przez Apigee w Obsługiwane kodowanie
  2. Zadbaj o to, aby serwer backendu zawsze wysyłał te dane:
    • Tylko obsługiwane kodowanie jako wartość parametru Nagłówek Content-Encoding w żądaniu
    • Ładunek odpowiedzi w obsługiwanym formacie do Apigee Edge i zgodny z formatem określono w nagłówku Content-Encoding

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 415 z powodu przekazania nieobsługiwanego kodowania nagłówek Content-Encoding jako 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 415 z 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 curl użyte do odtworzenia błędu 415
  • 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_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