Wyświetlasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X. info
Zgodnie ze specyfikacją HTTP RFC 7230, sekcja 3.2.2: Field Order Apigee Edge oczekuje, że żądanie HTTP od klienta lub odpowiedź HTTP od serwera backendu nie będą zawierać tego samego nagłówka przekazywanego więcej niż raz z tymi samymi lub innymi wartościami, chyba że dany nagłówek ma wyjątek i jest dozwolone występowanie duplikatów.
Domyślnie Apigee Edge zezwala na przekazywanie duplikatów i wielu wartości do większości nagłówków HTTP. Nie są jednak dozwolone niektóre nagłówki wymienione w sekcji Nagłówki, które nie mogą mieć duplikatów ani wielu wartości. Dlatego:
- 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 ani wielu wartości w Apigee Edge, zobaczysz
400 Bad Request
z kodem błęduprotocol.http.DuplicateHeader
. - Podobnie 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 lub wielu wartości w Apigee Edge
Zalecanym rozwiązaniem w celu rozwiązania tych błędów jest naprawienie aplikacji klienckiej i serwera backendu tak, aby nie wysyłały zduplikowanych nagłówków oraz aby zapewnić zgodność ze specyfikacją RFC 7230, sekcja 3.2.2: kolejność pól, zgodnie z opisem w tych scenariuszach rozwiązywania problemów:
W niektórych przypadkach możesz jednak chcieć dodać wyjątek, aby uwzględnić duplikaty i wielokrotne wartości w przypadku niektórych nagłówków HTTP. W takich sytuacjach możesz zezwolić na zduplikowane nagłówki i wiele wartości dla konkretnego nagłówka HTTP, ustawiając właściwość HTTPHeader.HEADER_NAME
na poziomie procesora wiadomości.
Dokument zawiera informacje o tej usłudze, wyjaśnia, jak ją skonfigurować, aby uniknąć wymienionych wyżej błędów, oraz podaje sprawdzone metody.
Właściwości nagłówka HTTP pozwalające na tworzenie duplikatów i wielu wartości
Apigee Edge udostępnia 2 poniższe właściwości do kontrolowania dopuszczania duplikatów i wielu wartości w nagłówkach HTTP. Pamiętaj, że można je skonfigurować tylko w procesorach wiadomości z użyciem 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 w przypadku wszystkich nagłówków HTTP, w tym nagłówków niestandardowych wysyłanych w ramach żądania HTTP przez klienta lub odpowiedzi HTTP wysłanej przez serwer zaplecza do Apigee Edge, dozwolone są duplikaty lub wartości wielokrotne. Wartość domyślna:
|
|
|
Ta właściwość służy do zastąpienia zachowania określonego nagłówka tym, co jest określone przez |
Jak wyżej |
Nagłówki, które nie mogą zawierać zduplikowanych ani wielokrotnych wartości
Jak już wspomnieliśmy, Apigee Edge domyślnie zezwala na duplikaty i wiele wartości w przypadku większości nagłówków HTTP. Wynika to z tego, że właściwość HTTPHeader.ANY
jest skonfigurowana z wartością multiValued, allowDuplicates.
.
Konfiguracja została zastąpiona
W przypadku niektórych nagłówków konfiguracja domyślna jest zastępowana za pomocą jednej z tych metod:
HTTPHeader.HEADER_NAME=multiValued, allowDuplicates
Ta konfiguracja nie zmienia domyślnego zachowania. Oznacza to, że w przypadku konkretnego nagłówka dozwolone są duplikaty i wiele wartości.
.HTTPHeader.HEADER_NAME=
Ta konfiguracja zmienia domyślne działanie. Oznacza to, że w danym nagłówku nie można mieć duplikatów ani wielu wartości.
Określanie nagłówków, które nie mogą zawierać duplikatów ani wielu wartości
W tej sekcji znajdziesz informacje o tym, jak zidentyfikować:
- konkretne nagłówki, które nie mogą zawierać duplikatów i wielu wartości w konfiguracji Apigee Edge Private Cloud,
- konkretne nagłówki z wcześniejszą konfiguracją,
Na maszynie z procesorem 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 dane wyjściowe:
# 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>
- Jak wyjaśniono w sekcji Zastąpiona konfiguracja, w przykładowych danych wyjściowych powyżej zwróć uwagę na te informacje:
- Nagłówek HTTP
Connection
jest zastępowany, ale dozwolone są duplikaty i wiele wartości - Nagłówki HTTP
Host
iExpires
są zastąpione i nie mogą zawierać duplikatów ani wielu wartości - Nagłówek HTTP
Date
jest zastępowany i może zawierać zduplikowane wartości, ale nie może mieć wielu wartości - W tym dokumencie wszystkie nagłówki, które pojawiają się w tym przykładzie (
Connection
,Host
,Expires
iDate
), są określane jako nagłówki z konfiguracją istniejącą wcześniej.
- Nagłówek HTTP
Działanie Apigee Edge
W tabeli poniżej opisujemy działanie Apigee Edge, gdy nagłówki są wysyłane jako duplikaty i z wieloma wartościami w zależności od tego, jak właściwości HTTPHeader
są skonfigurowane w procesorach wiadomości. W przykładzie HTTPHeader
jest to test-header
.
Żądanie | Nagłówki WYCHODĄCE na podstawie wartości pliku conf/http.properties+HTTPHeader.test-header= | |||
---|---|---|---|---|
<Puste> | allowDuplicates | multiValued | allowDuplicates, multiValued (DOMYŚLNY) | |
test‑header=a,b |
test‑header=a,b |
test‑header=a,b |
Wewnętrznie
Następnie pojawia się błąd |
Wewnętrznie podzieliliśmy
ale pierwotna forma jest wysyłana do docelowego odbiorcy. |
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 zastosujesz instrukcje podane w tym dokumencie, upewnij się, że rozumiesz konfigurowanie właściwości usługi Edge w prywatnym środowisku chmurowym, jak opisano w artykule Jak skonfigurować Edge.
Konfigurowanie parametru allowDuplikats i wielu wartości nagłówków
Jak wyjaśniliśmy w artykule o właściwościach nagłówka HTTP umożliwiających utworzenie duplikatów i wielu wartości, wartość właściwości HTTPHeader.ANY = allowDuplicates,
multiValued
oznacza, że wszystkie nagłówki mogą mieć duplikaty i wiele wartości w Apigee Edge. Pewne nagłówki są jednak zastępowane jawnie, aby nie zezwalać na zduplikowane nagłówki ani wiele wartości za pomocą właściwości HTTPHeader.HEADER_NAME
.
W tej sekcji wyjaśniamy, jak skonfigurować usługę HTTPHeader.HEADER_NAME
, aby zezwalała na duplikaty i wiele wartości w przypadku dowolnych nagłówków HTTP w procesorach wiadomości, używając odpowiedniego tokena zgodnie z składnią opisaną w artykule Jak skonfigurować Edge.
W tej sekcji użyjemy Expires
(i myheader
) jako przykładowego nagłówka, w przypadku którego nie zezwalamy na duplikaty i wiele wartości, jak opisano poniżej:
-
Określ bieżącą wartość właściwości
HTTPHeaderHEADER_NAME
, aby upewnić się, że nie jest już włączona możliwość zezwalania na duplikaty i wiele 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ść tokena właściwościHTTPHeader.Expires
w procesorze wiadomości:grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf
Wykonanie tego polecenia spowoduje jedno z tych działań:
- Jeśli właściwość jest ustawiona na pustą, oznacza to, że wartość została zastąpiona (a jest to nagłówek z wcześniejszą konfiguracją), aby 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. - W przypadku konkretnej właściwości nie ma żadnych działań, co oznacza, że wartość nie zostanie zastąpiona (a NIE jest to nagłówek z wcześniejszą konfiguracją). Oznacza to, że określony nagłówek może zostać wysłany więcej niż raz (duplikaty są dozwolone) w ramach żądania HTTP lub odpowiedzi HTTP do Apigee Edge.
- Właściwość jest ustawiona z wartością
allowDuplicates, multiValued
, co oznacza, że wartość została wyraźnie zastąpiona (jest to nagłówek z wcześniejszą konfiguracją). Oznacza to, że określony nagłówek może zostać wysłany więcej niż raz (duplikaty są dozwolone) 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=
Z wyjścia przykładowego widać, że parametr
HTTPHeader.Expires
jest pusty. Oznacza to, że w właściwości zastąpiono nagłówekExpires
, aby nie zezwalał na zduplikowane lub wielokrotne wartości. - Jeśli właściwość jest ustawiona na pustą, oznacza to, że wartość została zastąpiona (a jest to nagłówek z wcześniejszą konfiguracją), aby 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ść odpowiadająca konkretnemu nagłówkowi jest wyraźnie zastąpiona, aby nie zezwalać na zduplikowane lub wielokrotne wartości, jak w przykładowym wyjściu danych powyżej, tylko wtedy wykonaj podane niżej czynności. Jeśli nie zostanie zastąpiony, pomiń pozostałe czynności 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, uruchom to polecenie:chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
Ponownie uruchom przetwarzacz wiadomości:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
Aby uruchomić ponownie bez wpływu na ruch, zapoznaj się z artykułem Przerywanie pracy procesorów wiadomości bez wpływu na ruch.
- Jeśli masz więcej niż jeden procesor wiadomości, powtórz powyższe kroki na wszystkich z nich.
sprawdzenie, czy nagłówek jest skonfigurowany tak, aby zawierał duplikaty i wiele wartości;
Z tej sekcji dowiesz się, jak sprawdzić, czy właściwość
HTTPHeader.HEADER_NAME
dla konkretnego nagłówka została zaktualizowana, aby umożliwić zduplikowane wiadomości w usługach przetwarzania wiadomości.
Jako przykładowy nagłówek użyjemy wartości Expires
i sprawdzimy, czy powiązana z nim usługa HTTPHeader.Expires
została zaktualizowana.
Chociaż do aktualizowania wartości w przetwarzaczu wiadomości używasz elementu zasobu conf_http_HTTPHeader.Expires
, musisz sprawdzić, czy w przypadku właściwości HTTPHeader.Expires
została ustawiona nowa wartość.
- Na maszynie z procesorem wiadomości znajdź właściwość
HTTPHeader.HEADER_NAME
w katalogu/opt/apigee/edge-message-processor/conf
i sprawdź, czy została ona skonfigurowana 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
ma nową wartość, uruchom to polecenie:grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf
- Jeśli nowa wartość została ustawiona dla parametru
HTTPHeader.HEADER_NAME
w przetwarzaczu wiadomości, polecenie to wyświetli nową wartość w plikuhttp.properties
. Przykładowy wynik polecenia podanego powyżej po skonfigurowaniu funkcji
allowDuplicates
imultiValued
:/opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=allowDuplicates, multiValued
- W przykładowym wyjściu powyżej widać, że właściwość
HTTPHeader.Expires
została ustawiona z nową wartościąallowDuplicates, multiValued
whttp.properties
. Oznacza to, że w procesorze wiadomości zostało skonfigurowane zachowanie zezwalające na duplikaty i wiele wartości w plikuHTTPHeader
. - Jeśli nadal widzisz starą wartość właściwości
HTTPHeader.HEADER_NAME
, sprawdź, czy wszystkie czynności opisane w artykule Konfigurowanie właściwości allowDuplicates i wielokrotnych wartości w nagłówkach zostały wykonane prawidłowo. Jeśli pominięto jakiś krok, powtórz wszystkie czynności.Sprawdź, czy serwery proxy działają zgodnie z oczekiwaniami, zwłaszcza jeśli istnieje funkcjonalna logika pobierania i ustawiania nagłówków na serwerze proxy.
- Jeśli nadal nie możesz zmodyfikować usługi, skontaktuj się z zespołem pomocy Apigee Edge.
Wyłączanie zezwolenia na duplikaty nagłówków
W tej sekcji wyjaśniamy, jak skonfigurować usługę HTTPHeader.{Headername}
, aby nie zezwalać na duplikaty i wiele wartości w przypadku określonego nagłówka HTTP w procesorach wiadomości, używając odpowiedniego tokena zgodnie z składnią opisaną w sekcji Jak skonfigurować Edge.
W tej sekcji użyjemy nagłówka Expires
(i myheader
) jako przykładu nagłówka, w przypadku którego nie chcemy zezwalać na duplikaty, jak wyjaśniono poniżej:
-
Określ bieżącą wartość właściwości
HTTPHeaderHEADER_NAME
aby upewnić się, że nie jest ona już wyłączona, aby umożliwić duplikaty i wiele wartości za pomocą tego polecenia:grep -ri "HTTPHeader.HEADER_NAME" /opt/apigee/edge-message-processor/conf
Jeśli np. próbujesz ustawić właściwość nagłówka
Expires
, sprawdź bieżącą wartość właściwościHTTPHeader.Expires
w przetwarzaczu wiadomości:grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf
W wyniku powyższego polecenia pojawi się jeden z tych komunikatów:
- Właściwość jest pusta, co oznacza, że wartość została zastąpiona wartością „NIE”, aby umożliwić 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. - Jeśli nie ma żadnych trafień dla konkretnej właściwości, oznacza to, że wartość nie została zastąpiona i że nagłówek NIE ma wcześniejszej konfiguracji. Oznacza to, że określony nagłówek może zostać wysłany więcej niż raz (duplikaty są dozwolone) w ramach żądania HTTP lub odpowiedzi HTTP do Apigee Edge.
- Jeśli właściwość ma wartość
allowDuplicates, multiValued
, oznacza to, że wartość została wyraźnie zastąpiona i jest to istniejąca konfiguracja. Oznacza to jednak, że dany nagłówek można wysłać więcej niż raz (duplikaty są dozwolone) w ramach żądania HTTP lub odpowiedzi HTTP do Apigee.
Przykładowe dane wyjściowe 1
Przykładowe dane wyjściowe polecenia wyszukiwania 1:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=allowDuplicates, multiValued
Przykładowe dane wyjściowe wskazują, że właściwość
HTTPHeader.Expires
ma wartośćallowDuplicates, multiValued
. Oznacza to, że właściwość zostaje zastąpiona, aby umożliwić zduplikowanie lub podanie wielu wartości w nagłówku.Expires
Przykładowe dane wyjściowe 2
Przykładowe polecenie i dane wyjściowe nr 2 polecenia search
grep -ri "HTTPHeader.myheader" /opt/apigee/edge-message-processor/conf
Przykładowy wynik nie zawiera danych wyjściowych, co oznacza, że właściwość
HTTPHeader.myheader
jest domyślnie ustawiona naallowDuplicates, multiValued
. Oznacza to też, że w przypadku nagłówka myheader nie jest zastępowana . - Właściwość jest pusta, co oznacza, że wartość została zastąpiona wartością „NIE”, aby umożliwić zduplikowane nagłówki i wiele wartości. Oznacza to, że nie możesz wysyłać nagłówka
- Jeśli zauważysz którąś z tych sytuacji, wykonaj pozostałe czynności opisane w tej sekcji:
- Usługa odpowiadająca konkretnemu nagłówkowi zostaje zastąpiona, aby umożliwić występowanie duplikatów i wielu wartości, jak w przykładowym wyjściu 1 powyżej (nagłówek z wcześniejszą konfiguracją).
- Brak wyników dla usługi odpowiadającej konkretnemu nagłówkowi w przykładowym wyjściu #2 powyżej (nie jest to nagłówek ze wcześniejszą konfiguracją).
W przeciwnym razie pomiń pozostałe kroki w tej sekcji.
- Zmień 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 properties wiersz o tym formacie:
Konfiguracja wcześniej utworzona
Scenariusz 1. Nagłówek z dotychczasową konfiguracją:
conf_http_HTTPHeader.Expires=
Brak dotychczasowej konfiguracji
Scenariusz 2. Nie jest to nagłówek z dotychczasową konfiguracją:
conf/http.properties+HTTPHeader.myheader=
- Zapisz zmiany.
- Upewnij się, że właścicielem pliku właściwości jest użytkownik
apigee
. Jeśli tak nie jest, wykonaj to polecenie:chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
- Ponownie uruchom przetwarzacz wiadomości:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
Aby ponownie uruchomić urządzenie bez wpływu na ruch, zapoznaj się z sekcją o kroczącym ponownym uruchomieniu procesorów wiadomości bez wpływu na ruch.
- Jeśli masz więcej niż 1 przetwarzacz wiadomości, powtórz te czynności dla wszystkich przetwarzaczy wiadomości.
Sprawdzanie, czy nagłówek jest skonfigurowany tak, aby nie zezwalać na zduplikowane i wielokrotne wartości
W tej sekcji wyjaśniamy, jak sprawdzić, czy usługa
HTTPHeader.HEADER_NAME
dla konkretnego nagłówka została zaktualizowana, aby nie zezwalać na zduplikowane wiadomości w usługach przetwarzających wiadomości.
Jako przykładowy nagłówek użyjemy Expires
(i myheader
) i sprawdzimy, czy odpowiednia usługa HTTPHeader.Expires
(i HTTPHeader.myheader
) została zaktualizowana.
Na maszynie z procesorem wiadomości znajdź właściwość
HTTPHeader.HEADER_NAME
w katalogu/opt/apigee/edge-message- processor/conf
i sprawdź, czy została ona skonfigurowana 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
ma nową wartość, uruchom to polecenie:Konfiguracja wcześniej utworzona
grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf
Brak dotychczasowej konfiguracji
grep -ri "HTTPHeader.myheader" /opt/apigee/edge-message-processor/conf
- Jeśli nowa wartość nagłówka HTTP zostanie ustawiona na
HTTPHeader.HEADER_NAME
I w procesorze wiadomości, to polecenie powyżej wyświetli nową wartość w plikuhttp.properties
. - Przykładowy wynik polecenia powyżej po wyłączeniu opcji
allowDuplicates
:Konfiguracja wcześniej utworzona
Scenariusz 1. Nagłówek wygasa (nagłówek z wcześniejszą konfiguracją)
/opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=
Brak wcześniejszej konfiguracji
Scenariusz 2. Nagłówek myheader (nie jest to nagłówek z dotychczasową konfiguracją)
/opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.myheader=
- W przykładowych danych wyjściowych powyżej zwróć uwagę, że właściwość
HTTPHeader.Expires
( orazHTTPHeader.myheader
) została ustawiona na nową wartość {blank}
w poluhttp.properties
. Oznacza to, że w procesorze wiadomości wyłączone jest zachowanie zezwalające na duplikaty i wiele wartości dla konkretnego nagłówka HTTPExpires
(imyheader
). Jeśli nadal widzisz starą wartość właściwości
HTTPHeader.Expires (or HTTPHeader.myheader)
, sprawdź, czy wszystkie czynności opisane w artykule Konfigurowanie właściwości allowDuplicates i wielokrotnych wartości w nagłówkach zostały wykonane prawidłowo. Jeśli pominięto jakiś krok, powtórz wszystkie czynności.Upewnij się, że serwery proxy działają zgodnie z oczekiwaniami, zwłaszcza jeśli logika funkcjonalna umożliwia pobieranie i ustawianie nagłówków w serwerze proxy.
- Jeśli nadal nie możesz zmodyfikować usługi, skontaktuj się z zespołem pomocy Apigee Edge.