Przeglądasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X. Informacje
Zgodnie ze specyfikacją HTTP RFC 7230: sekcja 3.2.2: Kolejność pól Apigee Edge oczekuje, że żądanie HTTP z klienta lub serwera backendu nie będzie zawierać tego samego nagłówka przekazanego więcej niż raz z tymi samymi lub różnymi wartościami, chyba że konkretny nagłówek ma wyjątek i może mieć duplikaty.
Domyślnie Apigee Edge zezwala na przekazywanie duplikatów i wielu wartości do większości nagłówków HTTP. Nie zezwala jednak na niektóre nagłówki wymienione w sekcji Nagłówki, które nie mogą mieć duplikatów i wielu wartości. Dlatego:
- Otrzymasz
400 Bad Request
z kodem błęduprotocol.http.DuplicateHeader
, jeśli klient wyśle żądanie HTTP z danym nagłówkiem więcej niż raz lub z wieloma wartościami nagłówków HTTP, które nie mogą mieć duplikatów lub wielu wartości w Apigee Edge. - Podobnie, w przypadku nagłówka HTTP otrzymasz
502 Bad Gateway
z kodem błęduprotocol.http.DuplicateHeader
, jeśli serwer backendu wyśle odpowiedź HTTP z danym nagłówkiem więcej niż raz lub z wieloma wartościami nagłówków HTTP, które nie mogą mieć duplikatów ani wielu wartości w Apigee Edge
Zalecanym rozwiązaniem w przypadku tych błędów jest naprawienie aplikacji klienckiej i serwera backendu tak, aby nie wysyłały zduplikowanych nagłówków, oraz przestrzeganie specyfikacji RFC 7230, sekcja 3.2.2: Kolejność pól, jak opisano w tych scenariuszach rozwiązywania problemów:
W niektórych przypadkach możesz jednak dodać wyjątek, który będzie uwzględniać duplikaty i wiele wartości w przypadku niektórych nagłówków HTTP. W takich sytuacjach możesz zezwolić na zduplikowane nagłówki i wiele wartości w określonym nagłówku HTTP, ustawiając właściwość HTTPHeader.HEADER_NAME
na poziomie procesora wiadomości.
Ten dokument zawiera informacje o tej usłudze oraz wyjaśnia, jak włączyć tę usługę, aby uniknąć powyższych błędów. Przedstawiamy też sprawdzone metody dotyczące tej usługi.
Właściwości nagłówka HTTP pozwalające na dodawanie duplikatów i wielu wartości
Apigee Edge udostępnia 2 poniższe właściwości, które pozwalają kontrolować zachowanie dotyczące zezwalania na duplikaty i wiele wartości nagłówków HTTP. Pamiętaj, że można je skonfigurować tylko w procesorach wiadomości przy użyciu składni tokenów opisanej w artykule Jak skonfigurować Edge.
nazwa usługi, | Opis | Dozwolone wartości |
---|---|---|
HTTPHeader.ANY |
Ta właściwość wskazuje, czy dla wszystkich nagłówków HTTP, w tym nagłówków niestandardowych wysyłanych w ramach żądania HTTP wysyłanego przez klienta lub odpowiedzi HTTP wysyłanej przez serwer backendu do Apigee Edge, dozwolone są duplikaty czy wiele wartości. Wartość domyślna:
|
|
|
Ta właściwość służy do zastępowania działania konkretnego nagłówka względem właściwości |
Jak wyżej |
Nagłówki, które nie mogą mieć duplikatów i wielu wartości
Jak wyjaśniliśmy wcześniej, Apigee Edge domyślnie zezwala na duplikaty i wiele wartości w przypadku większości nagłówków HTTP. Dzieje się tak, ponieważ właściwość HTTPHeader.ANY
jest skonfigurowana z wartością multivalued, allowDuplicate.
Konfiguracja została zastąpiona
W przypadku niektórych nagłówków domyślna konfiguracja jest zastępowana jedną z tych metod:
HTTPHeader.HEADER_NAME=multivalued, allowDuplicate
Ta konfiguracja nie zmienia domyślnego działania. Oznacza to, że dany nagłówek może mieć duplikaty i wiele wartości.
.HTTPHeader.HEADER_NAME=
Ta konfiguracja zmienia działanie domyślne. Oznacza to, że konkretny nagłówek nie może mieć duplikatów i kilku wartości.
Określanie nagłówków, które nie mogą mieć duplikatów i wielu wartości
Z tej sekcji dowiesz się, jak rozpoznać:
- określone nagłówki, które nie mogą mieć duplikatów i wielu wartości w konfiguracji Apigee Edge Private Cloud; oraz
- konkretne nagłówki z wcześniejszą konfiguracją;
Na komputerze procesora wiadomości wyszukaj właściwość
HTTPHeader.
w katalogu/opt/apigee/edge-message-processor/conf
, jak pokazano poniżej:grep -ri "HTTPHeader." /opt/apigee/edge-message-processor/conf
Przykładowe wyniki:
# grep -ri "HTTPHeader" /opt/apigee/edge-message-processor/conf /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.ANY=allowDuplicates, multiValued /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Connection=allowDuplicates, multiValued … <snipped> /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Host= /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires= /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Date=allowDuplicates … <snipped>
- Zgodnie z opisem w sekcji Zastąpiona konfiguracja zwróć uwagę na te informacje w przykładowych danych wyjściowych powyżej:
- Nagłówek HTTP
Connection
zostanie zastąpiony, ale może mieć duplikaty i wiele wartości - Nagłówki HTTP
Host
iExpires
zostaną zastąpione i nie mogą mieć duplikatów ani wielu wartości - Nagłówek HTTP
Date
zostanie zastąpiony i może mieć duplikaty, ale nie może zawierać wielu wartości - Wszystkie nagłówki w tym miejscu (
Connection
,Host
,Expires
iDate
w powyższym przykładzie) są określane jako nagłówki z wstępnie istniejącą konfiguracją w tym dokumencie.
- Nagłówek HTTP
Działanie Apigee Edge
W tabeli poniżej opisano zachowanie Apigee Edge, gdy nagłówki są wysyłane jako duplikaty i z wieloma wartościami w zależności od konfiguracji właściwości HTTPHeader
w procesorach wiadomości. Przykład HTTPHeader
z test-header
.
Prośba | Wychodzące nagłówki nagłówków na podstawie wartości conf/http.properties+HTTPHeader.test-header= | |||
---|---|---|---|---|
<Puste> | allowDuplicate | multiValued | allowDuplikat, wielowartościowy (DOMYŚLNY) | |
test‑header=a,b |
test‑header=a,b |
test‑header=a,b |
Wewnętrzne podzieliliśmy
po czym zgłaszany jest błąd |
Wewnętrzne podzieliliśmy
ale następnie wysyłany jest pierwotny formularz. |
test‑header=a test‑header=b |
protocol.http. |
test‑header=a test‑header=b |
protocol.http. |
test‑header=a test‑header=b |
Zanim zaczniesz
Zanim wykonasz czynności opisane w tym dokumencie, upewnij się, że rozumiesz konfigurowanie właściwości Edge w Private Cloud. Opisaliśmy w artykule Jak skonfigurować Edge.
Konfigurowanie zezwalania na duplikaty i wielu wartości dla nagłówków
Jak wyjaśniono w sekcji Właściwości nagłówka HTTP pozwalające na dopuszczanie duplikatów i wielu wartości, wartość właściwości HTTPHeader.ANY = allowDuplicates,
multivalued
wskazuje, że w Apigee Edge wszystkie nagłówki mogą mieć duplikaty i wiele wartości. Istnieją jednak niektóre nagłówki, których wartości są zastępowane jawnie, aby zapobiec powielaniu nagłówków lub wielu wartości za pomocą właściwości HTTPHeader.HEADER_NAME
.
W tej sekcji wyjaśniono, jak skonfigurować właściwość HTTPHeader.HEADER_NAME
, aby zezwolić na duplikaty i wiele wartości takich nagłówków HTTP w procesorach wiadomości przy użyciu odpowiedniego tokena zgodnie ze składnią opisaną w artykule Jak skonfigurować Edge.
W tej sekcji użyjemy Expires
(i myheader
) jako przykładowego nagłówka, dla którego chcemy zezwolić na duplikaty i wiele wartości, tak jak to wyjaśniliśmy poniżej:
-
Określ bieżącą wartość właściwości
HTTPHeaderHEADER_NAME
, aby upewnić się, że nie jest ona już włączona, co pozwala na używanie duplikatów i wartości za pomocą tego polecenia:grep -ri "HTTPHeader.HEADER_NAME" /opt/apigee/edge-message-processor/conf
Jeśli na przykład próbujesz ustawić właściwość nagłówka
Expires
, sprawdź bieżącą wartość tokenaHTTPHeader.Expires
w procesorze wiadomości:grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf
Wyniki tego polecenia mogą mieć jeden z tych efektów:
- Właściwość jest ustawiona jako pusta, co oznacza, że wartość została zastąpiona (i jest to nagłówek z wstępnie istniejącą konfiguracją), co NIE zezwala na zduplikowane nagłówki i wiele wartości. Oznacza to, że nie możesz wysyłać nagłówka
Expires
więcej niż raz w ramach żądania HTTP lub odpowiedzi HTTP do Apigee. - Dla danej właściwości nie ma działań, co oznacza, że wartość nie zostanie zastąpiona (nie jest to nagłówek z wstępnie istniejącą konfiguracją). Oznacza to, że dany nagłówek można wysłać więcej niż raz (dozwolone są duplikaty) w ramach żądania HTTP lub odpowiedzi HTTP do Apigee Edge.
- Właściwość jest ustawiona na wartość
allowDuplicates, multivalued
, co oznacza, że wartość jest jawnie zastąpiona (jest to nagłówek z wstępnie istniejącą konfiguracją). Oznacza to, że dany nagłówek można wysłać więcej niż raz (dozwolone są duplikaty) w ramach żądania HTTP lub odpowiedzi HTTP do Apigee.
Przykładowe dane wyjściowe polecenia wyszukiwania:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=
Powyższe przykładowe dane wyjściowe pokazują, że właściwość
HTTPHeader.Expires
jest ustawiona jako pusta. Oznacza to, że właściwość została zastąpiona, aby nie można było powtarzać ani podawać wielu wartości w nagłówkuExpires
. - Właściwość jest ustawiona jako pusta, co oznacza, że wartość została zastąpiona (i jest to nagłówek z wstępnie istniejącą konfiguracją), co NIE zezwala na zduplikowane nagłówki i wiele wartości. Oznacza to, że nie możesz wysyłać nagłówka
- Jeśli zauważysz, że właściwość powiązana z konkretnym nagłówkiem została wyraźnie zastąpiona, by nie zezwalać na powtarzanie lub wielokrotne wartości, jak w przykładach powyżej, tylko wtedy wykonaj te czynności. Jeśli nie jest on wyraźnie zastąpiony, pomiń pozostałe kroki w tej sekcji.
- Edytuj. Jeśli nie istnieje, możesz go utworzyć:
/opt/apigee/customer/application/message-processor.properties
Aby na przykład otworzyć plik za pomocą vi, wpisz:
vi /opt/apigee/customer/application/message-processor.properties
- Dodaj wiersz w tym formacie:
conf_http_HTTPHeader.Expires=allowDuplicates, multiValued
- Zapisz zmiany.
Upewnij się, że plik właściwości należy do użytkownika
apigee
. Jeśli nie, wykonaj to polecenie:chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
Ponownie uruchom procesor wiadomości:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
Aby uruchomić ponownie bez wpływu na ruch, zapoznaj się z sekcją o wprowadzaniu ponownego uruchamiania procesorów wiadomości bez wpływu na ruch.
- Jeśli masz więcej niż 1 procesor wiadomości, powtórz powyższe kroki na wszystkich procesorach.
Weryfikacja nagłówka jest skonfigurowana tak, aby mieć duplikaty i wiele wartości
W tej sekcji dowiesz się, jak sprawdzić, czy właściwość HTTPHeader.HEADER_NAME
określonego nagłówka została zaktualizowana, aby umożliwić duplikowanie danych w procesorach wiadomości.
Użyjemy jako przykładowego nagłówka Expires
i sprawdzimy, czy odpowiednia właściwość HTTPHeader.Expires
została zaktualizowana.
Mimo że używasz tokena conf_http_HTTPHeader.Expires
do aktualizowania wartości w procesorze wiadomości, musisz sprawdzić, czy właściwość HTTPHeader.Expires
została ustawiona na nową wartość.
- Na komputerze procesora wiadomości wyszukaj właściwość
HTTPHeader.HEADER_NAME
w katalogu/opt/apigee/edge-message-processor/conf
i sprawdź, czy została ona ustawiona z nową wartością, jak pokazano poniżej:grep -ri "HTTPHeader.HEADER_NAME" /opt/apigee/edge-message-processor/conf
Jeśli np. chcesz sprawdzić, czy nowa wartość jest ustawiona we właściwości
HTTPHeader.Expires
, uruchom to polecenie:grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf
- Jeśli nowa wartość
HTTPHeader.HEADER_NAME
w procesorze wiadomości zostanie ustawiona, powyższe polecenie wyświetli nową wartość w plikuhttp.properties
. Przykładowy wynik z powyższego polecenia po skonfigurowaniu
allowDuplicates
imultiValued
wygląda tak:/opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=allowDuplicates, multiValued
- W powyższych przykładowych danych wyjściowych w
http.properties
właściwośćHTTPHeader.Expires
została ustawiona z nową wartościąallowDuplicates, multiValued
. Wskazuje to, że zachowanie zezwalające na duplikaty i wiele wartości wHTTPHeader
jest prawidłowo skonfigurowane w procesorze wiadomości. - Jeśli nadal widzisz starą wartość właściwości
HTTPHeader.HEADER_NAME
, sprawdź, czy zostały wykonane wszystkie czynności opisane w sekcji Konfigurowanie zezwalania na duplikaty i wielu wartości dla nagłówków. Jeśli pominięto jakiś krok, powtórz wszystkie kroki ponownie.Sprawdź, czy serwery proxy działają zgodnie z oczekiwaniami, zwłaszcza jeśli istnieje funkcjonalna logika pobierania i ustawiania nagłówków w serwerze proxy.
- Jeśli nadal nie możesz zmodyfikować właściwości, skontaktuj się z zespołem pomocy Apigee Edge.
Wyłączam zezwolenie na duplikatach nagłówków
W tej sekcji wyjaśniamy, jak skonfigurować właściwość HTTPHeader.{Headername}
w taki sposób, aby nie zezwalać na zduplikowanie i wiele wartości określonego nagłówka HTTP w procesorach wiadomości przy użyciu odpowiedniego tokena zgodnie ze składnią opisaną w sekcji Jak skonfigurować Edge.
W tej sekcji użyjemy Expires
(i myheader
) jako przykładowego nagłówka, w przypadku którego nie chcemy zezwalać na duplikaty, tak jak to wyjaśniliśmy poniżej:
-
Określ bieżącą wartość właściwości
HTTPHeaderHEADER_NAME
, aby upewnić się, że nie jest już wyłączona. Pozwoli to na dopuszczenie duplikatów i wielu wartości za pomocą tego polecenia:grep -ri "HTTPHeader.HEADER_NAME" /opt/apigee/edge-message-processor/conf
Jeśli na przykład próbujesz ustawić właściwość nagłówka
Expires
, sprawdź bieżącą wartość tokenaHTTPHeader.Expires
w procesorze wiadomości:grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf
Wyniki tego polecenia mogą mieć jeden z tych efektów:
- Właściwość jest ustawiona jako pusta, co oznacza, że wartość została zastąpiona NIE, aby umożliwić powielanie nagłówków i wielu wartości. Oznacza to, że nie możesz wysłać nagłówka
Expires
więcej niż raz w ramach żądania HTTP lub odpowiedzi HTTP do Apigee. - Nie ma działań dla danej właściwości. Oznacza to, że wartość nie zostanie zastąpiona, a jest to nagłówek NIE z wstępnie istniejącą konfiguracją. Oznacza to, że dany nagłówek można wysłać więcej niż raz (dozwolone są duplikaty) w ramach żądania HTTP lub odpowiedzi HTTP do Apigee Edge.
- Właściwość ma wartość
allowDuplicates, multivalued
, co oznacza, że wartość jest jawnie zastąpiona i istniejąca konfiguracja. Oznacza to jednak, że dany nagłówek można wysłać więcej niż raz (dozwolone są duplikaty) w ramach żądania HTTP lub odpowiedzi HTTP do Apigee.
Przykładowe wyniki nr 1
Przykładowe dane wyjściowe 1 polecenia wyszukiwania:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=allowDuplicates, multiValued
Przykładowe dane wyjściowe pokazują, że właściwość
HTTPHeader.Expires
jest ustawiona naallowDuplicates, multiValued
. Oznacza to, że właściwość została zastąpiona, co pozwoli na zduplikowanie lub wielokrotne wartości nagłówkaExpires
.Przykładowe wyniki nr 2
Przykładowe polecenie i wynik 2 polecenia wyszukiwania
grep -ri "HTTPHeader.myheader" /opt/apigee/edge-message-processor/conf
Przykładowe dane wyjściowe nie zawierają żadnych danych wyjściowych, co oznacza, że właściwość
HTTPHeader.myheader
ma domyślnie wartośćallowDuplicates, multiValued
. Oznacza to też, że właściwość nie zostanie zastąpiona w nagłówku myheader, - Właściwość jest ustawiona jako pusta, co oznacza, że wartość została zastąpiona NIE, aby umożliwić powielanie nagłówków i wielu wartości. Oznacza to, że nie możesz wysłać nagłówka
- Jeśli zauważysz jedną z poniższych opcji, wykonaj pozostałe czynności opisane w tej sekcji:
- Właściwość odpowiadająca konkretnemu nagłówkowi została zastąpiona, aby umożliwić zduplikowanie i wiele wartości, jak w przykładowym wyjściu nr 1 powyżej (nagłówek ze wstępnie istniejącą konfiguracją)
- Nie ma działań dla usługi odpowiadającej konkretnemu nagłówkowi, jak w przykładowym wyjściu nr 2 powyżej (a nie nagłówka z już istniejącą konfiguracją).
W przeciwnym razie pomiń pozostałe kroki opisane w tej sekcji.
- Edytuj ten plik. Jeśli nie istnieje, możesz go utworzyć.
/opt/apigee/customer/application/message-processor.properties
Aby na przykład otworzyć plik za pomocą vi, wpisz:
vi /opt/apigee/customer/application/message-processor.properties
- Dodaj do pliku właściwości wiersz w tym formacie:
Już istnieje
Scenariusz 1. Nagłówek z gotową konfiguracją:
conf_http_HTTPHeader.Expires=
Brak wcześniejszej konfiguracji
Scenariusz 2. To nie jest nagłówek z gotową konfiguracją:
conf/http.properties+HTTPHeader.myheader=
- Zapisz zmiany.
- Upewnij się, że plik właściwości należy do użytkownika
apigee
. Jeśli nie, wykonaj to działanie:chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
- Ponownie uruchom procesor wiadomości:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
Aby uruchomić ponownie bez wpływu na ruch, zapoznaj się z sekcją o wprowadzaniu ponownego uruchamiania procesorów wiadomości bez wpływu na ruch.
- Jeśli masz więcej niż 1 procesor wiadomości, powtórz powyższe kroki na wszystkich procesorach.
Weryfikacja nagłówka jest skonfigurowana tak, aby nie zezwalać na duplikaty i wiele wartości
W tej sekcji dowiesz się, jak sprawdzić, czy właściwość HTTPHeader.HEADER_NAME
określonego nagłówka została zaktualizowana, aby zapobiec wyświetlaniu duplikatów w systemach przetwarzania wiadomości.
Użyjemy Expires
(i myheader
) jako przykładowego nagłówka i sprawdzimy, czy odpowiednia właściwość HTTPHeader.Expires
(oraz HTTPHeader.myheader
) została zaktualizowana.
Na komputerze procesora wiadomości wyszukaj właściwość
HTTPHeader.HEADER_NAME
w katalogu/opt/apigee/edge-message- processor/conf
i sprawdź, czy została ona ustawiona z nową wartością, jak pokazano poniżej:grep -ri "HTTPHeader.HEADER_NAME" /opt/apigee/edge-message-processor/conf
Jeśli np. chcesz sprawdzić, czy właściwość
HTTPHeader.Expires
jest ustawiona na nową wartość, możesz uruchomić to polecenie:Już istnieje
grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf
Brak wcześniejszej konfiguracji
grep -ri "HTTPHeader.myheader" /opt/apigee/edge-message-processor/conf
- Jeśli nowa wartość nagłówka HTTP jest ustawiona na
HTTPHeader.HEADER_NAME
I w procesorze wiadomości, to polecenie powyżej wyświetla nową wartość w plikuhttp.properties
. - Przykładowy wynik powyższego polecenia po wyłączeniu
allowDuplicates
wygląda tak:Już istnieje
Scenariusz 1: wygaśnięcie nagłówka (nagłówek z już istniejącą konfiguracją)
/opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=
Brak wcześniejszej konfiguracji
Scenariusz 2. Nagłówek myheader (nie nagłówek z gotową konfiguracją)
/opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.myheader=
- W podanym wyżej przykładzie zwróć uwagę, że właściwość
HTTPHeader.Expires
( orazHTTPHeader.myheader
) została ustawiona na nową wartość {blank}
w poluhttp.properties
. Wskazuje to, że zachowanie zezwalające na duplikaty i wiele wartości dla określonego nagłówka HTTPExpires
(imyheader
) zostało wyłączone w procesorze wiadomości. Jeśli nadal widzisz starą wartość właściwości
HTTPHeader.Expires (or HTTPHeader.myheader)
, sprawdź, czy zostały wykonane wszystkie czynności opisane w sekcji Konfigurowanie zezwalania na duplikaty i wielu wartości dla nagłówków. Jeśli pominięto jakiś krok, powtórz wszystkie kroki ponownie.Sprawdź, czy serwery proxy działają zgodnie z oczekiwaniami, zwłaszcza jeśli istnieje funkcjonalna logika pobierania i ustawiania nagłówków w serwerze proxy.
- Jeśli nadal nie możesz zmodyfikować właściwości, skontaktuj się z zespołem pomocy Apigee Edge.