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); } }
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); }
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); } }
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); }