I think the decision to use the Host header is right, but I agree that it violates the wording in the servlet spec.
The SERVER_PORT and the port in the Host: header are different beasts - in most use cases I've seen the user is interested in the second. Note that a load balancer or proxy is required ( AFAIK ) to insert Host: headers if none is present. Costin On 29 Aug 2002, Bojan Smojver wrote: > On Thu, 2002-08-29 at 04:28, Bill Barker wrote: > > > The question in 12052 is whether Apache should use the socket port (as it > > does now), or the port in the Host header. When this came up with the > > Coyote/Http11 connector, the decision was that the Host header was the > > correct one. I'd have to say that the bug is valid. > > This is what the API (2.2) docs say about the getServerPort(): > > ---------------- > Returns the port number on which this request was received. For HTTP > servlets, same as the value of the CGI variable SERVER_PORT. > ---------------- > > This in itself could be contradicting, but I think that in the case of > Apache it is pretty straightforward. > > This is what Apache 2.0 does to populate the variable SERVER_PORT: > > ---------------- > apr_table_addn(e, "SERVER_PORT", > apr_psprintf(r->pool, "%u", ap_get_server_port(r))); > ---------------- > > And this is the ap_get_server_port(): > > ---------------- > AP_DECLARE(apr_port_t) ap_get_server_port(const request_rec *r) > { > apr_port_t port; > core_dir_config *d = > (core_dir_config *)ap_get_module_config(r->per_dir_config, > &core_module); > > if (d->use_canonical_name == USE_CANONICAL_NAME_OFF > || d->use_canonical_name == USE_CANONICAL_NAME_DNS) { > > /* With UseCanonicalName off Apache will form self-referential > * URLs using the hostname and port supplied by the client if > * any are supplied (otherwise it will use the canonical name). > */ > port = r->parsed_uri.port ? r->parsed_uri.port : > r->server->port ? r->server->port : > ap_default_port(r); > } > else { /* d->use_canonical_name == USE_CANONICAL_NAME_ON */ > > /* With UseCanonicalName on (and in all versions prior to 1.3) > * Apache will use the hostname and port specified in the > * ServerName directive to construct a canonical name for the > * server. (If no port was specified in the ServerName > * directive, Apache uses the port supplied by the client if > * any is supplied, and finally the default port for the > protocol > * used. > */ > port = r->server->port ? r->server->port : > r->connection->local_addr->port ? > r->connection->local_addr->port > ap_default_port(r); > } > > /* default */ > return port; > } > ---------------- > > This doesn't seem like coming from headers, but rather from URL or as > indicated by the server itself. What do you think? > > Bojan > > > -- > To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> > For additional commands, e-mail: <mailto:[EMAIL PROTECTED]> > > -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>