It’s said that all X-Forwarded-* headers will contain more than one
(comma-separated) value if the original request already contained one of
these headers. Since we could use these values as Host header, we choose
the initial(first) value. (apr_table_mergen() adds new value after the existing
value with “, ” prefix)
# File lib/webrick/httprequest.rb, line 444
def setup_forwarded_info
if @forwarded_server = self["x-forwarded-server"]
@forwarded_server = @forwarded_server.split(",", 2).first
end
@forwarded_proto = self["x-forwarded-proto"]
if host_port = self["x-forwarded-host"]
host_port = host_port.split(",", 2).first
@forwarded_host, tmp = host_port.split(":", 2)
@forwarded_port = (tmp || (@forwarded_proto == "https" ? 443 : 80)).to_i
end
if addrs = self["x-forwarded-for"]
addrs = addrs.split(",").collect(&:strip)
addrs.reject!{|ip| PrivateNetworkRegexp =~ ip }
@forwarded_for = addrs.first
end
end