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 Gatewayz kodem błęduprotocol.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:
|
|
|
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 |
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, allowDuplicatesTa 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
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>
- Zgodnie z wyjaśnieniem w sekcji Zastąpiona konfiguracja zwróć uwagę na te informacje w przykładowym wyniku powyżej:
- Nagłówek HTTP
Connectionjest zastępowany, ale może zawierać duplikaty i wiele wartości - Nagłówki HTTP
HostiExpiressą zastępowane i nie mogą zawierać duplikatów ani wielu wartości - Nagłówek HTTP
Datejest zastępowany i może zawierać duplikaty, ale nie może zawierać wielu wartości - Wszystkie nagłówki, które się tu pojawiają (
Connection,Host,ExpiresiDatew powyższym przykładzie), są w tym dokumencie określane jako nagłówki z wcześniejszą konfiguracją.
- 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 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 |
Wewnętrznie dzielimy
i wtedy pojawia się błąd |
Wewnętrznie dzielimy
ale oryginalny formularz jest wysyłany do miejsca docelowego. |
test‑header=atest‑header=b |
protocol.http. |
test‑header=atest‑header=b |
protocol.http. |
test‑header=atest‑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:
-
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ściHTTPHeader.Expiresw procesorze wiadomości:grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf
Wynik powyższego polecenia to jedna z tych możliwości:
- 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
Expireswięcej niż raz w ramach żądania HTTP lub odpowiedzi HTTP do Apigee. - 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.
- 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.Expiresjest 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łówkaExpires. - 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
- 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.
- 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
- Dodaj wiersz w tym formacie:
conf_http_HTTPHeader.Expires=allowDuplicates, multiValued
- Zapisz zmiany.
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
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.
- 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ść.
- Na komputerze procesora komunikatów wyszukaj właściwość
HTTPHeader.HEADER_NAMEw katalogu/opt/apigee/edge-message-processor/confi 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.Expireszostała ustawiona z nową wartością, uruchom to polecenie:grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf
- Jeśli nowa wartość zostanie prawidłowo ustawiona dla
HTTPHeader.HEADER_NAMEw procesorze komunikatów, powyższe polecenie wyświetli nową wartość w plikuhttp.properties. Przykładowy wynik powyższego polecenia po skonfigurowaniu
allowDuplicatesimultiValued:/opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=allowDuplicates, multiValued
- W przykładzie powyżej zwróć uwagę, że właściwość
HTTPHeader.Expireszostała ustawiona na nową wartośćallowDuplicates, multiValuedwhttp.properties. Oznacza to, że w procesorze komunikatów skonfigurowano zachowanie umożliwiające duplikaty i wiele wartości w parametrzeHTTPHeader. - 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.
- 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:
-
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ściHTTPHeader.Expiresw procesorze komunikatów:grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf
Wynik powyższego polecenia to jedna z tych możliwości:
- 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
Expireswięcej niż raz w ramach żądania HTTP lub odpowiedzi HTTP do Apigee. - 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.
- 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.Expiresma wartośćallowDuplicates, multiValued. Oznacza to, że właściwość zostaje zastąpiona, aby umożliwić zduplikowane lub wielokrotne wartości nagłówkaExpires.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.myheaderma wartośćallowDuplicates, multiValued. Oznacza to również, że właściwość nie jest zastępowana w przypadku nagłówka myheader. - 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
- Jeśli zauważysz jedną z tych sytuacji, wykonaj pozostałe czynności opisane w tej sekcji:
- 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ą).
- 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.
- 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
- 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=
- Zapisz zmiany.
- 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
- 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.
- 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.
Na komputerze procesora komunikatów wyszukaj właściwość
HTTPHeader.HEADER_NAMEw katalogu/opt/apigee/edge-message- processor/confi 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.Expiresustawiono 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
- Jeśli nowa wartość nagłówka HTTP zostanie prawidłowo ustawiona dla
HTTPHeader.HEADER_NAMEI w procesorze komunikatów, powyższe polecenie wyświetli nową wartość w plikuhttp.properties. - Przykładowy wynik powyższego polecenia po wyłączeniu
allowDuplicateswyglą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=
- W przykładzie danych wyjściowych powyżej zwróć uwagę, że właściwość
HTTPHeader.Expires( iHTTPHeader.myheader) została ustawiona na nową wartość {blank}whttp.properties. Oznacza to, że zachowanie umożliwiające duplikaty i wiele wartości w przypadku konkretnego nagłówka HTTPExpires(imyheader) zostało wyłączone w procesorze komunikatów. 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.
- Jeśli nadal nie możesz zmodyfikować właściwości, skontaktuj się z zespołem pomocy Apigee Edge.