class WEBrick::HTTPRequest

def setup_forwarded_info

existing value with ", " prefix)
the initial(first) value. (apr_table_mergen() adds new value after the
these headers. Since we could use these values as Host header, we choose
(comma-separated) value if the original request already contained one of
It's said that all X-Forwarded-* headers will contain more than one
def setup_forwarded_info
  if @forwarded_server = self["x-forwarded-server"]
    @forwarded_server = @forwarded_server.split(",", 2).first
  end
  if @forwarded_proto = self["x-forwarded-proto"]
    @forwarded_proto = @forwarded_proto.split(",", 2).first
  end
  if host_port = self["x-forwarded-host"]
    host_port = host_port.split(",", 2).first
    if host_port =~ /\A(\[[0-9a-fA-F:]+\])(?::(\d+))?\z/
      @forwarded_host = $1
      tmp = $2
    else
      @forwarded_host, tmp = host_port.split(":", 2)
    end
    @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