Konfigurowanie procesorów zezwalających na używanie zduplikowanych nagłówków

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łędu protocol.http.DuplicateHeader.
  • Podobnie otrzymasz 502 Bad Gateway z kodem błędu protocol.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:

multiValued, allowDuplicates,

  1. blank: zduplikowane i wielokrotne wartości nagłówków HTTP są niedozwolone.
  2. multiValued: podziel nagłówek z wieloma wartościami na kilka nagłówków. W nagłówkach HTTP można podać wiele wartości, ale nie można powtórzyć żadnej z nich. Wartość multiValued jest włączona, co oznacza, że test-header=a,b zostanie przekształcone w test-header=atest-header=b..
  3. allowDuplicates: pozwala na tworzenie wielu (duplikatowych) nagłówków HTTP o tej samej nazwie.
  4. multiValued, allowDuplicates: w przypadku nagłówków HTTP dozwolone są zarówno wartości wielokrotne, jak i zduplikowane.

HTTPHeader.HEADER_NAME

Ta właściwość służy do zastąpienia zachowania określonego nagłówka tym, co jest określone przez HTTPHeader.ANY

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ą,
  1. 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>
  2. Jak wyjaśniono w sekcji Zastąpiona konfiguracja, w przykładowych danych wyjściowych powyżej zwróć uwagę na te informacje:
    1. Nagłówek HTTP Connection jest zastępowany, ale dozwolone są duplikaty i wiele wartości
    2. Nagłówki HTTP HostExpires są zastąpione i nie mogą zawierać duplikatów ani wielu wartości
    3. Nagłówek HTTP Date jest zastępowany i może zawierać zduplikowane wartości, ale nie może mieć wielu wartości
    4. W tym dokumencie wszystkie nagłówki, które pojawiają się w tym przykładzie (Connection, Host, ExpiresDate), są określane jako nagłówki z konfiguracją istniejącą wcześniej.

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

protocol.http.
DuplicateHeader

Wewnętrznie test-header=a,b dzielimy się na:

  • test-header=a i
  • test-header=b

Następnie pojawia się błąd DuplicateHeader.

test‑header=a,b

Wewnętrznie podzieliliśmy test-header=a,b na:

  • test-header=a i
  • test-header=b,

ale pierwotna forma jest wysyłana do docelowego odbiorcy.

test‑header=a
test‑header=b
protocol.http.
DuplicateHeader
test‑header=a
test‑header=b
protocol.http.
DuplicateHeader
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:

  1. 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ści HTTPHeader.Expires w procesorze wiadomości:

    grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf
    

    Wykonanie tego polecenia spowoduje jedno z tych działań:

    1. 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.
    2. 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.
    3. 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łówek Expires, aby nie zezwalał na zduplikowane lub wielokrotne wartości.

  2. 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.
  3. 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
    
  4. Dodaj wiersz w tym formacie:
    conf_http_HTTPHeader.Expires=allowDuplicates, multiValued
  5. Zapisz zmiany.
  6. 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
    
  7. 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.

  8. 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ść.

  1. 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
    
  2. Jeśli nowa wartość została ustawiona dla parametru HTTPHeader.HEADER_NAME w przetwarzaczu wiadomości, polecenie to wyświetli nową wartość w pliku http.properties.
  3. Przykładowy wynik polecenia podanego powyżej po skonfigurowaniu funkcji allowDuplicatesmultiValued:

    /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=allowDuplicates, multiValued
  4. W przykładowym wyjściu powyżej widać, że właściwość HTTPHeader.Expires została ustawiona z nową wartością allowDuplicates, multiValued w http.properties. Oznacza to, że w procesorze wiadomości zostało skonfigurowane zachowanie zezwalające na duplikaty i wiele wartości w pliku HTTPHeader.
  5. 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.

  6. 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:

  1. 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ści HTTPHeader.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:

    1. 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.
    2. 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.
    3. 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 na allowDuplicates, multiValued. Oznacza to też, że w przypadku nagłówka myheader nie jest zastępowana .

  2. Jeśli zauważysz którąś z tych sytuacji, wykonaj pozostałe czynności opisane w tej sekcji:
    1. 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ą).
    2. 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.

  3. 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
    
  4. 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=
  5. Zapisz zmiany.
  6. 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
    
  7. 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.

  8. 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.

  1. 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
    
  2. 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 pliku http.properties.
  3. 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=
  4. W przykładowych danych wyjściowych powyżej zwróć uwagę, że właściwość HTTPHeader.Expires ( oraz HTTPHeader.myheader) została ustawiona na nową wartość {blank} w polu http.properties. Oznacza to, że w procesorze wiadomości wyłączone jest zachowanie zezwalające na duplikaty i wiele wartości dla konkretnego nagłówka HTTP Expires (i myheader).
  5. 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.

  6. Jeśli nadal nie możesz zmodyfikować usługi, skontaktuj się z zespołem pomocy Apigee Edge.