コード例 #1
0
        static void SetHeader(HttpHeaderDictionary headers, string fieldName, IEnumerable <string> fieldValues)
        {
            if (HttpHeaderClassification.IsHopByHopHeader(fieldName))
            {
                return;
            }

            if (HttpHeaderClassification.IsAppendedOnForwardHeader(fieldName))
            {
                headers.AddValues(fieldName, fieldValues);
            }
            else
            {
                headers.Remove(fieldName);
                headers.AddValues(fieldName, fieldValues);
            }
        }
コード例 #2
0
        static void SetHeader(IHttpEntity response, KeyValuePair <string, IEnumerable <string> > header)
        {
            if (HttpHeaderClassification.IsHopByHopHeader(header.Key))
            {
                return;
            }

            var values = string.Join(", ", header.Value);

            if (HttpHeaderClassification.IsAppendedOnForwardHeader(header.Key))
            {
                response.Headers.Add(header.Key, values);
            }
            else
            {
                response.Headers[header.Key] = values;
            }
        }
コード例 #3
0
        static void PrepareRequestHeaders(ICommunicationContext context, HttpRequestMessage request,
                                          bool convertLegacyHeaders)
        {
            StringBuilder legacyForward = null;

            void appendParameter(string key, string value)
            {
                if (legacyForward == null)
                {
                    legacyForward = new StringBuilder();
                }
                if (legacyForward.Length > 0)
                {
                    legacyForward.Append(";");
                }
                legacyForward.Append(key).Append("=").Append(value);
            }

            var orRequest = context.Request;

            foreach (var headerKey in orRequest.Headers.Keys)
            {
                if (convertLegacyHeaders)
                {
                    if (headerKey.Equals("X-Forwarded-Host", StringComparison.OrdinalIgnoreCase))
                    {
                        appendParameter("host", orRequest.Headers[headerKey]);
                        continue;
                    }

                    if (headerKey.Equals("X-Forwarded-For", StringComparison.OrdinalIgnoreCase))
                    {
                        appendParameter("for", orRequest.Headers[headerKey]);
                        continue;
                    }

                    if (headerKey.Equals("X-Forwarded-Proto", StringComparison.OrdinalIgnoreCase))
                    {
                        appendParameter("proto", orRequest.Headers[headerKey]);
                        continue;
                    }

                    if (headerKey.Equals("X-Forwarded-Base", StringComparison.OrdinalIgnoreCase))
                    {
                        var baseHeaderValue = orRequest.Headers[headerKey];
                        var baseVal         = $"\"{(baseHeaderValue[0] != '/' ? "/" + baseHeaderValue : baseHeaderValue)}\"";
                        appendParameter("base", baseVal);
                        continue;
                    }
                }

                if (headerKey.Equals("host", StringComparison.OrdinalIgnoreCase))
                {
                    continue;
                }

                if (HttpHeaderClassification.IsMicrosoftHttpContentHeader(headerKey))
                {
                    if (request.Content == null)
                    {
                        continue;
                    }

                    request.Content.Headers.Add(headerKey, orRequest.Headers.GetValues(headerKey));
                }
                else if (!HttpHeaderClassification.IsHopByHopHeader(headerKey))
                {
                    request.Headers.Add(headerKey, orRequest.Headers.GetValues(headerKey));
                }
            }

            if (convertLegacyHeaders && legacyForward?.Length > 0)
            {
                request.Headers.Add("forwarded", legacyForward.ToString());
            }

            request.Headers.Add("forwarded", CurrentForwarded(context));
        }
コード例 #4
0
        static void PrepareRequestHeaders(ICommunicationContext context, HttpRequestMessage request,
                                          bool convertLegacyHeaders)
        {
            StringBuilder legacyForward = null;

            void appendParameter(string key, string value)
            {
                if (legacyForward == null)
                {
                    legacyForward = new StringBuilder();
                }
                if (legacyForward.Length > 0)
                {
                    legacyForward.Append(";");
                }
                legacyForward.Append(key).Append("=").Append(value);
            }

            foreach (var header in context.Request.Headers)
            {
                if (convertLegacyHeaders)
                {
                    if (header.Key.Equals("X-Forwarded-Host", StringComparison.OrdinalIgnoreCase))
                    {
                        appendParameter("host", header.Value);
                        continue;
                    }

                    if (header.Key.Equals("X-Forwarded-For", StringComparison.OrdinalIgnoreCase))
                    {
                        appendParameter("for", header.Value);
                        continue;
                    }

                    if (header.Key.Equals("X-Forwarded-Proto", StringComparison.OrdinalIgnoreCase))
                    {
                        appendParameter("proto", header.Value);
                        continue;
                    }
                }

                if (header.Key.Equals("host", StringComparison.OrdinalIgnoreCase))
                {
                    continue;
                }

                if (HttpHeaderClassification.IsMicrosoftHttpContentHeader(header.Key))
                {
                    if (request.Content == null)
                    {
                        continue;
                    }
                    request.Content.Headers.Add(header.Key, header.Value);
                }
                else if (!HttpHeaderClassification.IsHopByHopHeader(header.Key))
                {
                    request.Headers.Add(header.Key, header.Value);
                }
            }

            if (convertLegacyHeaders && legacyForward?.Length > 0)
            {
                request.Headers.Add("forwarded", legacyForward.ToString());
            }

            request.Headers.Add("forwarded", CurrentForwarded(context));
        }