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 z serwera backendu nie będą zawierać tego samego nagłówka przekazywanego więcej niż raz z tą samą lub różnymi wartościami, chyba że dany 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 używanie niektórych nagłówków, które są 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 określonym 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, otrzymasz kod błędu 400 Bad Request.protocol.http.DuplicateHeader
  • Podobnie otrzymasz 502 Bad Gateway z kodem błędu protocol.http.DuplicateHeader, jeśli serwer backendu wyśle odpowiedź HTTP z określonym 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 tych błędów jest poprawienie aplikacji klienckiej i serwera backendu, aby nie wysyłały zduplikowanych nagłówków i były zgodne ze specyfikacją RFC 7230, sekcja 3.2.2: kolejność pól, co wyjaśniono w tych instrukcjach rozwiązywania problemów:

W niektórych przypadkach możesz jednak dodać wyjątek, aby uwzględnić 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 przypadku konkretnego nagłówka HTTP, ustawiając właściwość HTTPHeader.HEADER_NAME na poziomie procesora komunikatów.

W tym dokumencie znajdziesz informacje o tej usłudze, wyjaśnienie, jak ją włączyć, aby uniknąć wspomnianych wyżej błędów, oraz sprawdzone metody związane z tym tematem.

Właściwości nagłówka HTTP, które zezwalają na duplikaty i wiele wartości

Apigee Edge udostępnia te 2 właściwości, które umożliwiają kontrolowanie zachowania związanego z dozwolonymi duplikatami i wieloma wartościami nagłówków HTTP. Pamiętaj, że można je skonfigurować tylko w procesorach wiadomości za pomocą składni tokenów opisanej w artykule Konfigurowanie Edge.

Nazwa usługi Opis Dozwolone wartości
HTTPHeader.ANY

Ta właściwość wskazuje, czy duplikaty lub wiele wartości są dozwolone w przypadku 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.

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 przypadku nagłówków HTTP dozwolonych jest wiele wartości, ale duplikaty są niedozwolone. Wartość multiValued jest włączona, co oznacza, że test-header=a,b zostanie przekonwertowana na test-header=a i test-header=b..
  3. allowDuplicates: umożliwia używanie wielu (zduplikowanych) nagłówków HTTP o tej samej nazwie.
  4. multiValued, allowDuplicates: w przypadku nagłówków HTTP dozwolone są zarówno wielokrotne wartości, jak i duplikaty.

HTTPHeader.HEADER_NAME

Ta właściwość służy do zastępowania działania określonego nagłówka w stosunku do tego, co jest określone przez HTTPHeader.ANY.

Jak wyżej

Nagłówki, które nie mogą mieć duplikatów ani wielu wartości

Jak wspomnieliśmy wcześniej, Apigee Edge domyślnie zezwala na duplikaty i wiele wartości w większości nagłówków HTTP. Wynika to z tego, że właściwość HTTPHeader.ANY ma wartość multiValued, allowDuplicates..

Konfiguracja została zastąpiona

W przypadku niektórych nagłówków domyślna konfiguracja jest zastępowana za pomocą jednej z tych metod:

  • HTTPHeader.HEADER_NAME=multiValued, allowDuplicates

    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 domyślne działanie. Oznacza to, że konkretny nagłówek nie może zawierać 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 dowiesz się, jak określić:

  • Konkretne nagłówki, które nie mogą mieć duplikatów ani wielu wartości w konfiguracji chmury prywatnej Apigee Edge, oraz
  • Konkretne nagłówki z wcześniej skonfigurowanymi ustawieniami
  1. Na komputerze z procesorem komunikatów 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. Zgodnie z wyjaśnieniem w sekcji Zastąpiona konfiguracja zwróć uwagę na te informacje w przykładowym wyniku powyżej:
    1. Nagłówek HTTP Connection jest zastępowany, ale może zawierać duplikaty i wiele wartości
    2. Nagłówki HTTP HostExpires są zastępowane i nie mogą zawierać duplikatów ani wielu wartości
    3. Nagłówek HTTP Date jest zastępowany i może zawierać duplikaty, ale nie może zawierać wielu wartości
    4. Wszystkie nagłówki, które się tu pojawiają (Connection, Host, ExpiresDate w powyższym przykładzie), są w tym dokumencie określane jako nagłówki z wcześniejszą konfiguracją.

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 konfiguracji właściwości HTTPHeader w procesorach wiadomości. Podajemy też przykład HTTPHeader test-header.

Żądanie Wychodzące nagłówki na podstawie wartości conf/http.properties+HTTPHeader.test-header=
<Blank> allowDuplicates multiValued allowDuplicates, multiValued (DOMYŚLNE)
test‑header=a,b test‑header=a,b test‑header=a,b

protocol.http.
DuplicateHeader

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

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

i wtedy pojawia się błąd DuplicateHeader.

test‑header=a,b

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

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

ale oryginalny formularz jest wysyłany do miejsca docelowego.

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 wykonasz czynności opisane w tym dokumencie, zapoznaj się z konfigurowaniem właściwości Edge w chmurze prywatnej, które zostało opisane w artykule Konfigurowanie Edge.

Konfigurowanie parametrów allowDuplicates i wielu wartości nagłówków

Jak wyjaśniono w sekcji Właściwości nagłówka HTTP umożliwiające duplikaty i wiele 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. Istnieją jednak nagłówki, których wartości są wyraźnie zastępowane, aby nie zezwalać na zduplikowane nagłówki ani wiele wartości dla tego nagłówka przy użyciu właściwości HTTPHeader.HEADER_NAME.

W tej sekcji opisujemy, jak skonfigurować właściwość HTTPHeader.HEADER_NAME, aby zezwalać na duplikaty i wiele wartości w przypadku nagłówków HTTP w procesorach wiadomości, używając odpowiedniego tokena zgodnie ze składnią opisaną w artykule Konfigurowanie 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, jak wyjaśniono poniżej:

  1. Sprawdź bieżącą wartość właściwości HTTPHeaderHEADER_NAME, aby upewnić się, że nie jest ona jeszcze włączona, aby zezwalać 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 chcesz 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
    

    Wynik powyższego polecenia to jedna z tych możliwości:

    1. Jeśli właściwość jest pusta, 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. Jeśli nie ma wyników dla konkretnej usługi, oznacza to, że wartość nie została zastąpiona (i NIE jest to nagłówek z wcześniejszą konfiguracją). Oznacza to, że konkretny nagłówek może być wysył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 jawnie zastąpiona (i jest to nagłówek z wcześniejszą konfiguracją). Oznacza to, że określony nagłówek może być wysył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 przykładowych danych wyjściowych powyżej wynika, że właściwość HTTPHeader.Expires jest ustawiona na pustą wartość. Oznacza to, że właściwość jest zastępowana, aby nie zezwalać na duplikaty ani wiele wartości w przypadku nagłówka Expires.

  2. Jeśli zauważysz, że właściwość odpowiadająca konkretnemu nagłówkowi jest wyraźnie zastępowana, aby nie zezwalać na duplikaty ani wiele wartości, jak w przykładzie powyżej, tylko wtedy wykonaj te czynności. Jeśli nie jest wyraźnie zastąpiona, pomiń pozostałe kroki w tej sekcji.
  3. Edytuj. Jeśli nie istnieje, możesz ją utworzyć:
    /opt/apigee/customer/application/message-processor.properties

    Aby na przykład otworzyć plik za pomocą edytora vi, wpisz to polecenie:

    vi /opt/apigee/customer/application/message-processor.properties
    
  4. Dodaj wiersz w tym formacie:
    conf_http_HTTPHeader.Expires=allowDuplicates, multiValued
  5. Zapisz zmiany.
  6. Sprawdź, czy 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. Uruchom ponownie procesor komunikatów:

    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
    

    Aby ponownie uruchomić procesory wiadomości bez wpływu na ruch, zapoznaj się z artykułem Stopniowe ponowne uruchamianie procesorów wiadomości bez wpływu na ruch.

  8. Jeśli masz więcej niż jeden procesor komunikatów, powtórz powyższe czynności na wszystkich procesorach komunikatów.

Sprawdzanie, czy nagłówek jest skonfigurowany tak, aby zawierał duplikaty i wiele wartości

W tej sekcji dowiesz się, jak sprawdzić, czy właściwość HTTPHeader.HEADER_NAMEokreślonego nagłówka została zaktualizowana, aby umożliwić duplikowanie w procesorach wiadomości.

Użyjemy Expires jako przykładowego nagłówka i sprawdzimy, czy odpowiednia właściwość HTTPHeader.Expires została zaktualizowana.

Nawet jeśli używasz tokena conf_http_HTTPHeader.Expires do aktualizowania wartości w procesorze komunikatów, musisz sprawdzić, czy rzeczywista właściwość HTTPHeader.Expires została ustawiona na nową wartość.

  1. Na komputerze procesora komunikatów wyszukaj właściwość HTTPHeader.HEADER_NAME w katalogu /opt/apigee/edge-message-processor/conf i sprawdź, czy ma ona nową wartość, jak pokazano poniżej:
    grep -ri "HTTPHeader.HEADER_NAME" /opt/apigee/edge-message-processor/conf
    

    Jeśli na przykład chcesz sprawdzić, czy właściwość HTTPHeader.Expires została ustawiona z nową wartością, uruchom to polecenie:

    grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf
    
  2. Jeśli nowa wartość zostanie prawidłowo ustawiona dla HTTPHeader.HEADER_NAME w procesorze komunikatów, powyższe polecenie wyświetli nową wartość w pliku http.properties.
  3. Przykładowy wynik powyższego polecenia po skonfigurowaniu allowDuplicatesmultiValued:

    /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=allowDuplicates, multiValued
  4. W przykładzie powyżej zwróć uwagę, że właściwość HTTPHeader.Expires została ustawiona na nową wartość allowDuplicates, multiValuedhttp.properties. Oznacza to, że w procesorze komunikatów skonfigurowano zachowanie umożliwiające duplikaty i wiele wartości w parametrze HTTPHeader.
  5. Jeśli nadal widzisz starą wartość właściwości HTTPHeader.HEADER_NAME, sprawdź, czy wszystkie kroki opisane w artykule Konfigurowanie parametrów allowDuplicates i multiple values dla nagłówków zostały wykonane prawidłowo. Jeśli pominiesz któryś krok, powtórz wszystkie czynności.

    Upewnij się, że serwery proxy działają zgodnie z oczekiwaniami, zwłaszcza jeśli istnieje logika funkcjonalna pobierania i ustawiania nagłówków w serwerze proxy.

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

Wyłączanie opcji allowDuplicates dla nagłówków

W tej sekcji wyjaśniamy, jak skonfigurować właściwość HTTPHeader.{Headername}, aby nie zezwalać na duplikaty i wiele wartości w przypadku określonego nagłówka HTTP na procesorach wiadomości, używając odpowiedniego tokena zgodnie ze składnią opisaną w artykule Konfigurowanie Edge.

W tej sekcji użyjemy Expires (i myheader) jako przykładowego nagłówka, dla 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 jeszcze wyłączona, aby zezwolić 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 chcesz ustawić właściwość nagłówka Expires, sprawdź bieżącą wartość tokena właściwości HTTPHeader.Expires w procesorze komunikatów:

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

    Wynik powyższego polecenia to jedna z tych możliwości:

    1. Jeśli właściwość jest pusta, oznacza to, że wartość została zastąpiona wartością NOT, aby umożliwić duplikowanie nagłówków 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 wyników dla konkretnej usługi, oznacza to, że wartość nie została zastąpiona, a jest to nagłówek NOT z wcześniej istniejącą konfiguracją. Oznacza to, że konkretny nagłówek może być wysył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 konkretny nagłówek może być wysyłany 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 nr 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 ma wartość allowDuplicates, multiValued. Oznacza to, że właściwość zostaje zastąpiona, aby umożliwić zduplikowane lub wielokrotne wartości nagłówka Expires.

    Przykładowe dane wyjściowe 2

    Przykładowe polecenie i dane wyjściowe nr 2 polecenia wyszukiwania

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

    Przykładowe dane wyjściowe nie zawierają żadnych informacji, co oznacza, że domyślnie właściwość HTTPHeader.myheader ma wartość allowDuplicates, multiValued. Oznacza to również, że właściwość nie jest zastępowana w przypadku nagłówka myheader.

  2. Jeśli zauważysz jedną z tych sytuacji, wykonaj pozostałe czynności opisane w tej sekcji:
    1. Usługa odpowiadająca konkretnemu nagłówkowi jest zastępowana, aby zezwalać na duplikaty i wiele wartości, jak w przykładzie danych wyjściowych 1 powyżej (nagłówek z wcześniejszą konfiguracją).
    2. W przypadku usługi odpowiadającej konkretnemu nagłówkowi nie ma żadnych wizyt, tak jak w przykładzie danych wyjściowych nr 2 powyżej (nie jest to nagłówek z wcześniejszą konfiguracją).

    W przeciwnym razie pomiń pozostałe kroki w tej sekcji.

  3. 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ą edytora vi, wpisz to polecenie:

    vi /opt/apigee/customer/application/message-processor.properties
    
  4. Dodaj do pliku właściwości wiersz w tym formacie:

    Dotychczasowa konfiguracja

    Scenariusz 1. Nagłówek z wcześniejszą konfiguracją:

    conf_http_HTTPHeader.Expires=

    Brak wcześniejszej konfiguracji

    Scenariusz 2. Nie jest to nagłówek z wcześniej skonfigurowanym ustawieniem:

    conf/http.properties+HTTPHeader.myheader=
  5. Zapisz zmiany.
  6. Sprawdź, czy plik właściwości należy do użytkownika apigee. Jeśli nie, wykonaj te czynności:
    chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
    
  7. Uruchom ponownie procesor komunikatów:
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
    

    Aby ponownie uruchomić procesory wiadomości bez wpływu na ruch, zapoznaj się z tym artykułem: Stopniowe ponowne uruchamianie procesorów wiadomości bez wpływu na ruch.

  8. Jeśli masz więcej niż 1 procesor komunikatów, powtórz powyższe czynności na wszystkich procesorach komunikatów.

Sprawdzanie, czy nagłówek jest skonfigurowany tak, aby nie zezwalać na duplikaty i wiele wartości

W tej sekcji wyjaśniamy, jak sprawdzić, czy właściwość HTTPHeader.HEADER_NAMEdla określonego nagłówka została zaktualizowana, aby nie zezwalać na duplikaty w procesorach wiadomości.

Użyjemy Expires (i myheader) jako przykładowego nagłówka i sprawdzimy, czy odpowiednia usługa HTTPHeader.Expires (i HTTPHeader.myheader) została zaktualizowana.

  1. Na komputerze procesora komunikatów wyszukaj właściwość HTTPHeader.HEADER_NAME w katalogu /opt/apigee/edge-message- processor/conf i sprawdź, czy ma ona nową wartość, jak pokazano poniżej:

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

    Jeśli na przykład chcesz sprawdzić, czy w przypadku właściwości HTTPHeader.Expires ustawiono nową wartość, możesz uruchomić to polecenie:

    Dotychczasowa konfiguracja

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

    Brak wcześniejszej konfiguracji

    grep -ri "HTTPHeader.myheader" /opt/apigee/edge-message-processor/conf
    
  2. Jeśli nowa wartość nagłówka HTTP zostanie prawidłowo ustawiona dla HTTPHeader.HEADER_NAME I w procesorze komunikatów, powyższe polecenie wyświetli nową wartość w pliku http.properties.
  3. Przykładowy wynik powyższego polecenia po wyłączeniu allowDuplicates wygląda tak:

    Dotychczasowa konfiguracja

    Scenariusz 1: nagłówek Expires (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 wcześniejszą konfiguracją)

    /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.myheader=
  4. W przykładzie danych wyjściowych powyżej zwróć uwagę, że właściwość HTTPHeader.Expires ( i HTTPHeader.myheader) została ustawiona na nową wartość {blank}http.properties. Oznacza to, że zachowanie umożliwiające duplikaty i wiele wartości w przypadku konkretnego nagłówka HTTP Expires (i myheader) zostało wyłączone w procesorze komunikatów.
  5. Jeśli nadal widzisz starą wartość właściwości HTTPHeader.Expires (or HTTPHeader.myheader), sprawdź, czy wszystkie kroki opisane w artykule Konfigurowanie parametrów allowDuplicates i wielu wartości nagłówków zostały wykonane prawidłowo. Jeśli pominiesz któryś krok, powtórz wszystkie czynności.

    Upewnij się, że serwery proxy działają zgodnie z oczekiwaniami, zwłaszcza jeśli istnieje logika funkcjonalna pobierania i ustawiania nagłówków w serwerze proxy.

  6. Jeśli nadal nie możesz zmodyfikować właściwości, skontaktuj się z zespołem pomocy Apigee Edge.