All HTTP Header parameter names and Query parameter names were UPPERCASED by mistake in a few RTC SDK versions, which is what I have fixed in the latest RTC SDK version. In other words, the results you are getting now are correct and RTC SDK 3.30 had a bug (it was converting names to UPPERCASE - which it should NOT have been doing).
But, the change in HTTP header and query parameter name casing only affects developers who are accessing these items through the ItemName and ItemValue properties. Would you have used the Value property instead, you would not even notice there was a change, because the Request.Value['X-FORWARDED-FOR'] returns the same as Request.Value['X-Forwarded-For'] (index is case-insensitive). The same goes for Query parameters, where Request.Query['SID'] returns the same as Request.Query['Sid'].
If you want to make your code error-proof and work with different clients (some might send you parameters in all uppercase, some could do it in mixed case and some in lowercase), you should actually change your implementation to use the Value (or ValueCS) property instead of enumerating through Items using ItemName. The ItemName property is normally used only when you need the exact names passed in the correct case (for example, if you would be writing a proxy and would not want to modify header values). If you are expecting parameters (for example, the X-FORWARDED-FOR header), it is easier to simply check a parameter value using the Value or ValueCS property (as explained above) than to enumerate through all received parameters and check if the one you need is present.
Also ... If you have old and new RTC Clients, because the old RTC SDK version was automatically converting all HTTP header values names to UpperCase, you should not put specific expectations about HTTP value name casing in your code. Make your code independent of any case style used by the other side, or you might be breaking compatibility with old clients by making your code compatible with new clients. Also note that some Proxy servers might be sending you X-FORWARDED-FOR instead of X-Forwarded-For, or any other possible alternative.
HTTP specification (
http://www.w3.org/Protocols/HTTP/1.0/draft-ietf-http-spec.html#Message-Headers ) says when referring to HTTP header parameters (message headers) that <quote>
field names are case-insensitive</quote>, which means that you should not make the assumption about the case in which each HTTP header parameter name will be received. Instead, make your implementation case-insensitive. You can do this by using the Value property instead of ItemName and ItemValue, or by using case-insensitive string comparison functions (like "SameText", for example) to check if ItemName matches.
Best Regards,
Danijel Tkalcec