Wyświetlasz dokumentację Apigee Edge.
Otwórz dokumentację
Apigee X. info
Krótki opis problemu
Aplikacja kliencka otrzymuje kod stanu HTTP 400 Bad Request z kodem błędu
protocol.http.DuplicateHeader w odpowiedzi na wywołania interfejsu API.
Komunikat o błędzie
Aplikacja kliencka otrzymuje ten kod odpowiedzi:
HTTP/1.1 400 Bad Request
Może też pojawić się komunikat o błędzie podobny do tego poniżej:
{
"fault":{
"faultstring":"Duplicate Header \"Expires\"",
"detail":{
"errorcode":"protocol.http.DuplicateHeader"
}
}
}Możliwe przyczyny
Ten błąd występuje, jeśli określony nagłówek HTTP, który nie może mieć duplikatów w Apigee Edge, pojawia się więcej niż raz z tymi samymi lub różnymi wartościami w żądaniu HTTP wysłanym przez klienta do Apigee Edge.
Zgodnie z
sekcją 3.2.2 dokumentu RFC 7230: Field Order, nadawca NIE MOŻE generować w wiadomości wielu pól
nagłówka o tej samej nazwie, chyba że cała wartość pola nagłówka jest zdefiniowana jako lista rozdzielona przecinkami [tzn. #(values)] lub pole nagłówka jest a
dobrze znanym wyjątkiem. Jeśli Apigee Edge znajdzie określony nagłówek, który nie może mieć
duplikatów, więcej niż raz w żądaniu HTTP wysłanym przez klienta, odpowie kodem
400 Bad Request i kodem błędu
protocol.http.DuplicateHeader.
Oto możliwe przyczyny tego błędu:
| Przyczyna | Opis | Instrukcje rozwiązywania problemów, których dotyczy |
|---|---|---|
| Zduplikowany nagłówek w żądaniu | Żądanie HTTP z aplikacji klienckiej do Apigee zawiera zduplikowane nagłówki. | Użytkownicy chmury publicznej i prywatnej Edge |
Typowe czynności diagnostyczne
Aby zdiagnozować ten błąd, użyj jednego z tych narzędzi lub metod:
Monitorowanie interfejsów API
Aby zdiagnozować błąd za pomocą monitorowania interfejsów API:
- Zaloguj się w interfejsie Apigee Edge jako użytkownik z odpowiednią rolą.
Przełącz się na organizację, w której chcesz zbadać problem.

- Otwórz stronę Analyze > API Monitoring > Investigate (Analiza > Monitorowanie interfejsów API > Zbadaj).
- Wybierz konkretny przedział czasu, w którym wystąpiły błędy.
- Upewnij się, że filtr Proxy jest ustawiony na All (Wszystkie).
- Wykreśl Fault Code (Kod błędu) na osi Time (Czas).
Wybierz komórkę z kodem błędu
protocol.http.DuplicateHeaderjak pokazano poniżej:
Informacje o kodzie błędu
protocol.http.DuplicateHeadersą wyświetlane jak poniżej:
- Kliknij View logs (Wyświetl logi) i rozwiń wiersz nieudanego żądania.
- W oknie Logs (Logi) zanotuj te informacje:
- Status Code (Kod stanu):
400 - Fault Source (Źródło błędu):
apigee - Fault Code (Kod błędu):
protocol.http.DuplicateHeader.
- Status Code (Kod stanu):
- Jeśli Fault Source (Źródło błędu) ma wartość
apigeelubMP, a Fault Code (Kod błędu) ma wartośćprotocol.http.DuplicateHeader, oznacza to, że żądanie HTTP od klienta zawierało zduplikowane nagłówki.
Narzędzie Trace
NGINX
Aby zdiagnozować błąd za pomocą logów dostępu NGINX:
- Jeśli jesteś użytkownikiem chmury prywatnej, możesz użyć logów dostępu NGINX, aby określić
kluczowe informacje o błędach HTTP
400. Sprawdź logi dostępu NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logGdzie: ORG, ENV i PORT# są zastępowane rzeczywistymi wartościami.
- Sprawdź, czy w określonym czasie występują błędy
400(jeśli problem wystąpił w przeszłości) lub czy nadal występują żądania, które kończą się błędem400. Jeśli znajdziesz błędy
400, w których X-Apigee-fault-code pasuje do wartościprotocol.http.DuplicateHeader, określ wartość X-Apigee-fault-source.Przykładowy błąd 400 z logu dostępu NGINX:
Powyższy przykładowy wpis z logu dostępu NGINX ma te wartości dla X-Apigee- fault-code i X-Apigee-fault-source:
Nagłówki odpowiedzi Wartość X-Apigee-fault-code protocol.http.DuplicateHeaderX-Apigee-fault-source MP
Przyczyna: zduplikowany nagłówek w żądaniu
Diagnostyka
- Określ Fault Code (Kod błędu) i Fault Source (Źródło błędu) zaobserwowanego błędu za pomocą monitorowania interfejsów API lub logów dostępu NGINX, jak opisano w sekcji Typowe czynności diagnostyczne.
- Jeśli Fault Source (Źródło błędu) ma wartość
apigeelubMP, oznacza to, że żądanie wysłane przez aplikację kliencką do Apigee zawiera zduplikowane nagłówki. Rzeczywisty nagłówek, który jest wysyłany więcej niż raz w ramach żądania, możesz określić za pomocą jednej z tych metod:
Komunikat o błędzie
Używanie komunikatu o błędzie
Jeśli masz dostęp do pełnego komunikatu o błędzie otrzymanego z Apigee Edge, to zapoznaj się z elementem
faultstring. Elementfaultstringzawiera nazwę nagłówka, który został wysłany więcej niż raz.Przykładowy komunikat o błędzie:
"faultstring":"Duplicate Header \"Expires\""
- W powyższym komunikacie o błędzie widać, że nagłówek
Expireszostał wysłany więcej niż raz, co widać w elemenciefaultstring.
Rzeczywiste żądanie
Używanie rzeczywistego żądania
Jeśli masz dostęp do rzeczywistego żądania wysłanego przez aplikację kliencką, wykonaj te czynności:
- Sprawdź listę nagłówków przekazanych w żądaniu.
- Jeśli zauważysz, że określony nagłówek pojawia się w żądaniu więcej niż raz z tą samą lub różnymi wartościami, jest to przyczyna tego błędu.
Przykładowe żądanie:
curl https://HOST_ALIAS/duplicateheadertest -v -H "Expires: Mon, 21 June 2021 07:28:00 GMT" -H "Expires: Mon, 21 June 2021 07:28:00 GMT"
W powyższym przykładowym żądaniu nagłówek
Expireszostał wysłany więcej niż raz. Dlatego to żądanie kończy się błędem400 Bad Requesti kodem błędu:protocol.http.DuplicateHeader.- Jeśli masz dostęp do logów klienta, możesz sprawdzić, czy zawierają one informacje o rzeczywistym żądaniu wysłanym do Apigee Edge, i określić nagłówek, który został wysłany więcej niż raz.
Rozdzielczość
Naprawianie duplikatów
Opcja 1. [zalecana] Popraw aplikację kliencką, aby nie zawierała zduplikowanych nagłówków
- Przeanalizuj przyczynę wysyłania przez konkretnego klienta zduplikowanego nagłówka. Na przykład
Expiresw powyższym przypadku. Sprawdź, czy serwery proxy interfejsu API mogą akceptować zduplikowany nagłówek. Zgodnie ze specyfikacją HTTP RFC7230 zwykle nie jest to pożądane. - Jeśli nie jest to pożądane, zmodyfikuj aplikację kliencką, aby nie wysyłała zduplikowanych nagłówków.
W omówionym powyżej przykładzie zauważono, że nagłówek
Expiresjest wysyłany 2 razy z tą samą wartością, co jest niepożądane. Problem możesz rozwiązać, przekazując nagłówekExpirestylko raz, jak pokazano poniżej:curl https://HOST_ALIAS/duplicateheadertest -v -H "Expires: Mon, 21 June 2021 07:28:00 GMT"
- Jeśli jest to pożądane i chcesz zezwolić na zduplikowane nagłówki, przejdź do opcji 2. Używanie właściwości CwC.
CwC
Opcja 2. Używanie właściwości CwC
Apigee udostępnia właściwość CwC
CwC HTTPHeader.<HeaderName> ,która umożliwia aplikacjom klienckim
i serwerom docelowym wysyłanie zduplikowanych nagłówków do serwerów proxy interfejsu API w Apigee Edge.
| Właściwość CwC | Wartości |
|---|---|
HTTPHeader.<HeaderName> |
allowDuplicates,multivalued |
Na przykład tę właściwość można ustawić w procesorach komunikatów, aby zezwolić na duplikaty i
wiele wartości w nagłówku Expires.
HTTPHeader.Expires=allowDuplicates, multiValued
- Jeśli jesteś użytkownikiem chmury prywatnej, możesz skonfigurować tę właściwość, aby uniemożliwić
Apigee Edge zgłaszanie błędu
400 Bad Request, nawet jeśli żądanie zawiera zduplikowane nagłówki. W tym celu skorzystaj z instrukcji Konfigurowanie procesorów komunikatów do używania zduplikowanych nagłówków. - Jeśli jesteś użytkownikiem chmury publicznej, skontaktuj się z zespołem pomocy Apigee Edge, aby skonfigurować tę właściwość dla swojej organizacji.
Specyfikacja
Apigee oczekuje, że aplikacja kliencka nie będzie wysyłać zduplikowanych nagłówków w ramach żądania zgodnie z tymi specyfikacjami RFC:
| Specyfikacja |
|---|
| RFC 7230, sekcja 3.2.2: Field Order |
| RFC 7230, sekcja 3.2 Header Fields |
Jeśli nadal potrzebujesz pomocy zespołu pomocy Apigee, zapoznaj się z sekcją Informacje diagnostyczne, które musisz zebrać.
Informacje diagnostyczne, które musisz zebrać
Zbierz te 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 proxy interfejsu API
- Pełne polecenie
curlużyte do odtworzenia błędu400 - Plik śledzenia żądań do interfejsu API
Jeśli jesteś użytkownikiem chmury prywatnej, podaj te informacje:
- Pełny komunikat o błędzie zaobserwowany w przypadku nieudanych żądań
- Nazwa środowiska
- Pakiet proxy interfejsu API
- Pełne polecenie
curlużyte do odtworzenia błędu400 - 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 rzeczywistymi wartościami.
- Dzienniki systemowe procesora komunikatów
/opt/apigee/var/log/edge-message-processor/logs/system.log