コード例 #1
0
        protected virtual void AddUpstreamResponseHeadersToDownstream(
            ProxyContext context,
            HttpResponseMessage upstreamResponse)
        {
            var headers = upstreamResponse.Headers;

            if (headers is null)
            {
                return;
            }

            var options              = context.ProxyDownstreamResponseHeaderSettings;
            var discardEmpty         = options.DiscardEmpty;
            var discardUnderscore    = options.DiscardUnderscore;
            var doNotTransferHeaders = options.DoNotTransferHeaders;
            ICollection <string>?nonStandardHopByHopHeaders = null; // lazy instantiate if and only if needed

            foreach (var header in headers)
            {
                var name = header.Key;

                if (!sanitizer.IsValid(
                        name,
                        header.Value,
                        discardEmpty,
                        discardUnderscore))
                {
                    continue;
                }

                if (doNotTransferHeaders.Contains(name))
                {
                    continue;
                }

                var values = header.Value.AsStringValues();

                if (name.EqualsOrdinalIgnoreCase(HeaderNames.SetCookie))
                {
                    UpdateSetCookiesValues(context, values);
                }
                else
                {
                    if (nonStandardHopByHopHeaders is null)
                    {
                        nonStandardHopByHopHeaders = GetNonStandardHopByHopHeaders(headers);
                    }

                    if (nonStandardHopByHopHeaders.Contains(name))
                    {
                        continue;
                    }
                }

                AddHeaderValues(context, name, values);
            }
        }
コード例 #2
0
        public virtual Task SetHeadersAsync(
            ProxyContext context,
            HttpResponseMessage upstreamResponse,
            CancellationToken cancellationToken)
        {
            CheckValue(context, nameof(context));
            CheckValue(upstreamResponse, nameof(upstreamResponse));

            var options = context.ProxyDownstreamResponseHeaderSettings;

            if (options.DiscardInboundHeaders)
            {
                return(Task.CompletedTask);
            }

            cancellationToken.ThrowIfCancellationRequested();

            var headers = upstreamResponse.TrailingHeaders;

            if (headers is null)
            {
                return(Task.CompletedTask);
            }

            if (!ResponseTrailerExtensions.SupportsTrailers(context.Response))
            {
                return(Task.CompletedTask);
            }

            var discardEmpty      = options.DiscardEmpty;
            var discardUnderscore = options.DiscardUnderscore;

            foreach (var header in headers)
            {
                if (!sanitizer.IsValid(
                        header.Key,
                        header.Value,
                        discardEmpty,
                        discardUnderscore))
                {
                    continue;
                }

                AddHeaderValues(context, header.Key, header.Value.AsStringValues());
            }

            return(Task.CompletedTask);
        }
コード例 #3
0
        protected virtual void AddDownstreamRequestHeadersToUpstream(
            ProxyContext context,
            HttpRequestMessage upstreamRequest)
        {
            var           options                    = context.ProxyUpstreamRequestHeadersSettings;
            var           headers                    = context.Request.Headers;
            var           discardEmpty               = options.DiscardEmpty;
            var           discardUnderscore          = options.DiscardUnderscore;
            var           doNotTransferHeaders       = options.DoNotTransferHeaders;
            ISet <string>?nonStandardHopByHopHeaders = null; // lazy instantiate if and only if needed

            foreach (var header in headers)
            {
                var name = header.Key;

                if (!sanitizer.IsValid(
                        name,
                        header.Value,
                        discardEmpty,
                        discardUnderscore))
                {
                    continue;
                }

                if (doNotTransferHeaders.Contains(name))
                {
                    continue;
                }

                if (nonStandardHopByHopHeaders is null)
                {
                    nonStandardHopByHopHeaders = GetNonStandardHopByHopHeaders(headers);
                }

                if (nonStandardHopByHopHeaders.Contains(name))
                {
                    continue;
                }

                AddHeaderValues(context, upstreamRequest, name, header.Value);
            }
        }
コード例 #4
0
        protected virtual Task SetContentHeadersAsync(
            ProxyContext context,
            HttpResponseMessage upstreamResponse,
            CancellationToken cancellationToken)
        {
            var options = context.ProxyDownstreamResponseHeaderSettings;

            if (options.DiscardInboundHeaders)
            {
                return(Task.CompletedTask);
            }

            cancellationToken.ThrowIfCancellationRequested();

            var discardEmpty      = options.DiscardEmpty;
            var discardUnderscore = options.DiscardUnderscore;

            foreach (var header in upstreamResponse.Content.Headers)
            {
                var name = header.Key;

                if (!sanitizer.IsValid(
                        name,
                        header.Value,
                        discardEmpty,
                        discardUnderscore))
                {
                    continue;
                }

                AddHeaderValues(
                    context,
                    name,
                    header.Value.AsStringValues());
            }

            return(Task.CompletedTask);
        }