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]>

Reply via email to