Apigee Edge belgelerini görüntülüyorsunuz.
.
Git:
Apigee X belgeleri. bilgi
HTTP üstbilgileri, istemci uygulamalarına ve arka uç hizmetlerine izin veren ad-değer çiftleridir. istek ve yanıtlar hakkında ek bilgi iletin. Bazı basit örnekler:
- Yetkilendirme isteği üstbilgisi, kullanıcı kimlik bilgilerini sunucuya iletir:
Authorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l
Content-Type
başlığı, gönderilen istek/yanıt içeriğinin türünü gösterir:Content-Type: application/json
HTTP Üstbilgileri bağlı olarak bir veya daha fazla değere sahip olabilir başlık alanı tanımları. Birden çok değerli başlıkta virgülle ayrılmış değerler bulunur. Aşağıda, birden çok değer içeren başlıklara birkaç örnek verilmiştir:
Cache-Control: no-cache, no-store, must-revalidate
Accept: text/html, application/xhtml+xml, application/xml;q=0.9, */*;q=0.8
X-Forwarded-For: 10.125.5.30, 10.125.9.125
Apigee Edge, geliştiricilerin akış değişkenleri veya koşullu akışlardan herhangi birinde yer almaması gerekir. Aşağıda, kullanılabilecek değişkenlerin listesi verilmiştir için şu adımları izleyin:
Akış değişkenleri:
message.header.header-name
request.header.header-name
response.header.header-name
message.header.header-name.N
request.header.header-name.N
response.header.header-name.N
JavaScript nesneleri:
context.proxyRequest.headers.header-name
context.targetRequest.headers.header-name
context.proxyResponse.headers.header-name
context.targetResponse.headers.header-name
Aşağıda, bir istek başlığının değerinin nasıl okunacağını ve bir değişkende nasıl depolanacağını gösteren örnek bir Atama İletisi politikası verilmiştir:
<AssignMessage continueOnError="false" enabled="true" name="assign-message-default"> <AssignVariable> <Name>reqUserAgent</Name> <Ref>request.header.User-Agent</Ref> </AssignVariable> </AssignMessage>
Antipattern
Edge politikalarındaki HTTP üstbilgilerinin değerlerine, yalnızca ilk değeri döndürecek şekilde erişme yanlıştır ve belirli HTTP üstbilgilerinin birden fazla değeri varsa sorunlara neden olabilir.
Aşağıdaki bölümlerde başlık erişimi örnekleri verilmiştir.
1. Örnek: JavaScript kodu kullanarak birden çok değerli Accept üstbilgisini okuma
Accept
başlığının aşağıda gösterildiği gibi birden fazla değere sahip olduğunu göz önünde bulundurun:
Accept: text/html, application/xhtml+xml, application/xml
Accept
üstbilgisindeki değeri okuyan JavaScript kodu şöyledir:
// Read the values from Accept header var acceptHeaderValues = context.getVariable("request.header.Accept");
Yukarıdaki JavaScript kodu, Accept
üstbilgisindeki yalnızca ilk değeri döndürür.
(ör. text/html
).
2. Örnek: AtamaMessage veya RaiseFault politikasında birden çok değerli Access-Control-Allow-Headers üstbilgisini okuyun
Access-Control-Allow-Headers
başlığının aşağıda gösterildiği gibi birden fazla değere sahip olduğunu göz önünde bulundurun:
Access-Control-Allow-Headers: content-type, authorization
AttributionMessage veya PromoteFault politikasının Access-Control-Allow-Headers
üstbilgisini ayarlayan kodun bir bölümü aşağıda verilmiştir:
<Set> <Headers> <Header name="Access-Control-Allow-Headers">{request.header.Access-Control-Request-Headers}</Header> </Headers> </Set>
Yukarıdaki kod, Access-Control-Allow-Headers
Başlığını yalnızca
istek başlığı Access-Control-Allow-Headers
, bu örnekte content-type
.
Etki
- Yukarıdaki her iki örnekte de, birden çok değerli başlıklardan yalnızca ilk değerin döndürüldüğüne dikkat edin. Bu değerler daha sonra API Proxy akışındaki başka bir politika veya arka uç hizmeti tarafından kullanılırsa bir işlev veya mantığı yerine getirmek, beklenmedik bir sonuca veya sonuca yol açabilir.
- İstek başlığı değerlerine erişildiğinde ve hedef sunucuya iletildiğinde API istekleri arka uç tarafından yanlış işlenir ve bu nedenle yanlış sonuçlar verebilir.
- İstemci uygulaması, Edge yanıtındaki belirli üstbilgi değerlerine bağımlıysa hatalı işlemler yapabilir ve yanlış sonuçlar verebilir.
En İyi Uygulama
Uygun yerleşik akış değişkenlerini kullanın:
request.header.header_name.values.count
,request.header.header_name.N
response.header.header_name.values.count
,response.header.header_name.N
.Ardından, JavaScript veya Java açıklama metni politikalarındaki belirli bir başlıktan tüm değerleri almak için işlemi tekrarlayın.
Örnek: Birden çok değerli başlığı okumak için örnek JavaScript kodu
for (var i = 1; i <=context.getVariable('request.header.Accept.values.count'); i++) { print(context.getVariable('request.header.Accept.' + i)); }
Örneğin,
application/xml;q=0.9, */*;q=0.8
yukarıdaki koda sahip bir değer olarak görünür.Başlık değerlerinin sınırlayıcı olarak noktalı virgül kullanılarak bölünmesi gerekiyorsa
string.split(";")
değerini kullanın bunları değerlere ayırmanızı sağlar.request.header.header_name.values
akış değişkenindesubstring()
işlevini kullanın özelliğini kullanabilirsiniz.Örnek: Birden çok değere sahip bir üstbilgiyi okumak için örnek RaiseFault veyaAssignmentMessage Politikası
<Set> <Headers> <Header name="Access-Control-Allow-Headers">{substring(request.header.Access-Control-Request-Headers.values,1,-1)}</Header> </Headers> </Set>