Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin. bilgi
HTTP üst bilgileri, istemci uygulamalarının ve arka uç hizmetlerinin sırasıyla istekler ve yanıtlar hakkında ek bilgiler iletmesine olanak tanıyan ad değeri çiftleridir. Bazı basit örnekler:
- Yetkilendirme isteği başlığı, kullanıcı kimlik bilgilerini sunucuya iletir:
Authorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l
Content-Type
başlığı, gönderilen istek/yanıt içeriğinin türünü belirtir:Content-Type: application/json
HTTP üst bilgileri, üstbilgi alanı tanımlarına bağlı olarak bir veya daha fazla değere sahip olabilir. Birden çok değerli üstbilgi virgülle ayrılmış değerler içerir. Aşağıda, birden çok değer içeren birkaç başlık örneği 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 Edge politikaları veya koşullu akışlardaki akış değişkenlerini kullanarak başlıklara kolayca erişmesine olanak tanır. Edge'de belirli bir istek veya yanıt başlığına erişmek için kullanılabilecek değişkenlerin listesini burada bulabilirsiniz:
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ığı değerinin nasıl okunacağını ve bir değişkende nasıl depolanacağını gösteren örnek bir Atadi 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şmek yanlıştır ve belirli HTTP üstbilgileri birden fazla değer içeriyorsa sorunlara neden olabilir.
Aşağıdaki bölümlerde üstbilgi erişimi örnekleri verilmiştir.
1. Örnek: JavaScript kodu kullanarak birden çok değerli Accept üstbilgisi okuma
Accept
başlığının aşağıda gösterildiği gibi birden fazla değere sahip olduğunu unutmayın:
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 yalnızca Accept
üstbilgisindeki text/html
gibi ilk değeri döndürür.
2. Örnek: AtaMessage veya PromoteFault politikasında birden çok değerli Access-Control-Allow-Headers üstbilgisi okuma
Access-Control-Allow-Headers
başlığının aşağıda gösterildiği gibi birden fazla değere sahip olduğunu unutmayın:
Access-Control-Allow-Headers: content-type, authorization
Access-Control-Allow-Headers
üstbilgisini Atayarak veya YükseltFault politika ayarına sahip kodda bulunan bölümü burada bulabilirsiniz:
<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 Access-Control-Allow-Headers
istek başlığındaki (bu örnekte content-type
) ilk değerle ayarlar.
Etki
- Yukarıdaki her iki örnekte de yalnızca birden çok değerli başlıklardan 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 bir işlev ya da mantık gerçekleştirmek amacıyla kullanılırsa 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şlenebilir ve bu nedenle hatalı sonuçlar verebilir.
- İstemci uygulaması, Edge yanıtındaki belirli üstbilgi değerlerine bağımlıysa hatalı işlem yapıp yanlış sonuçlar da 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ında belirli bir başlıktan tüm değerleri getirmek için yineleyin.
Örnek: Birden çok değerli üstbilgiyi 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 kodla birlikte 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 bunları değerlere ayırmak için
string.split(";")
kullanın.Belirli bir üst bilginin tüm değerlerini okumak için PromoteFault veyaassignMessage politikasındaki
request.header.header_name.values
akış değişkenindesubstring()
işlevini kullanın.Örnek: Birden çok değere sahip bir üstbilgiyi okumak için örnek ForFault veyaassignMessage Politikası
<Set> <Headers> <Header name="Access-Control-Allow-Headers">{substring(request.header.Access-Control-Request-Headers.values,1,-1)}</Header> </Headers> </Set>