Hi,
We are passing request header x-client-certificate-issuer header and the header is coming with value .
How ever while setting this as reference or retrieving this value from the context object is not giving complete string . Below is the example .
Incoming request :
Header : x-client-certificate-issuer = C=BE,G=Test,L=DE,Org=Test
where header name = x-client-certificate-issuer
Header Value = C=BE,G=Test,L=DE,Org=Test
JS - While fetching this value to a variable
var DN = context.getVariable("x-client-certificate-issuer");
print (DN);
Out put result is = C=BE . It is omitting the character after comma.
Best Regards,
Patty
Solved! Go to Solution.
Yes, this is the expected, documented behavior.
Reading a little further down that documentation page, it explains that you can use a variable of a different form to get the entire string. Can you try this?
var DN = context.getVariable("request.header.x-client-certificate-issuer.values.string");
This will work if you have commas in the header value.
A little more explanation and context:
The issue relates to the meaning of commas mean within HTTP headers. The HTTP spec allows multiple headers of the same name in a request. Suppose I can have a request that has repeated instances of a header, like this:
x-forwarded-for: 192.168.1.3
x-forwarded-for: 234.78.1.2
x-forwarded-for: 78.12.13.6
That can alternatively be expressed as a single header, with commas separating the values, like this:
x-forwarded-for: 192.168.1.3,234.78.1.2,78.12.13.6
And Apigee recognizes that. Specifically for headers that contain commas, also known as multi-valued headers, Apigee allows you to retrieve any of those 3 values, by using a variable name like request.header.HEADERNAME.N
, where N
is replaced by an index {1, 2, 3}. And you can retrieve the entire string, effectively ignoring the commas, by using request.header.HEADERNAME.values.string
.
Yes, this is the expected, documented behavior.
Reading a little further down that documentation page, it explains that you can use a variable of a different form to get the entire string. Can you try this?
var DN = context.getVariable("request.header.x-client-certificate-issuer.values.string");
This will work if you have commas in the header value.
A little more explanation and context:
The issue relates to the meaning of commas mean within HTTP headers. The HTTP spec allows multiple headers of the same name in a request. Suppose I can have a request that has repeated instances of a header, like this:
x-forwarded-for: 192.168.1.3
x-forwarded-for: 234.78.1.2
x-forwarded-for: 78.12.13.6
That can alternatively be expressed as a single header, with commas separating the values, like this:
x-forwarded-for: 192.168.1.3,234.78.1.2,78.12.13.6
And Apigee recognizes that. Specifically for headers that contain commas, also known as multi-valued headers, Apigee allows you to retrieve any of those 3 values, by using a variable name like request.header.HEADERNAME.N
, where N
is replaced by an index {1, 2, 3}. And you can retrieve the entire string, effectively ignoring the commas, by using request.header.HEADERNAME.values.string
.
Thank you Dino . This solution worked .
Thank you for nice and crystal explanation .
Best Regards,
Patty