in kong/kong/runloop/handler.lua [1479:1575]
after = function(ctx)
if byte(ctx.request_uri or var.request_uri, -1) == QUESTION_MARK then
var.upstream_uri = var.upstream_uri .. "?"
elseif var.is_args == "?" then
var.upstream_uri = var.upstream_uri .. "?" .. (var.args or "")
end
local upstream_scheme = var.upstream_scheme
local balancer_data = ctx.balancer_data
balancer_data.scheme = upstream_scheme
local upstream_host = var.upstream_host
if upstream_host ~= nil and upstream_host ~= "" then
balancer_data.preserve_host = true
if upstream_scheme == "grpc" or upstream_scheme == "grpcs" then
local ok, err = set_authority(upstream_host)
if not ok then
log(ERR, "failed to set :authority header: ", err)
end
end
end
local ok, err, errcode = balancer_execute(ctx)
if not ok then
local body = utils.get_default_exit_body(errcode, err)
return kong.response.exit(errcode, body)
end
local ok, err = balancer.set_host_header(balancer_data, upstream_scheme, "upstream_host")
if not ok then
log(ERR, "failed to set balancer Host header: ", err)
return exit(500)
end
local http_connection = var.http_connection
if http_connection ~= "keep-alive" and
http_connection ~= "close" and
http_connection ~= "upgrade"
then
for _, header_name in csv(http_connection) do
if header_name == "upgrade" then
if var.upstream_connection == "keep-alive" then
clear_header(header_name)
end
else
clear_header(header_name)
end
end
end
local http_te = var.http_te
if http_te then
if http_te == "trailers" then
var.upstream_te = "trailers"
else
for _, header_name in csv(http_te) do
if header_name == "trailers" then
var.upstream_te = "trailers"
break
end
end
end
end
if var.http_proxy then
clear_header("Proxy")
end
if var.http_proxy_connection then
clear_header("Proxy-Connection")
end
end