On Wed, 28 Aug 2002, Bill Barker wrote:

> > 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.
> 
> Not anymore. ;-)  In the current 2.4 spec draft it is required to be taken
> from the Host header.

I hope this is listed in the 'incompatible changes between 2.3 and 2.4' :-)

As for the new wording - am I missing the ':-)' ? 

So: getServerPort() should return the same as the CGI variable SERVER_PORT
( which returns the server port, not the host header ! ), meaning the
value of the part after : in the Host header. 

I didn't know that the servlet spec can define new meanings for the 
CGI spec.

Costin


> <spec-quote version="2.4" section="14.2.16">
> getServerName()
> public java.lang.String getServerName()
> Returns the host name of the server to which the request was sent. For HTTP
> servlets, same as the value of the CGI variable SERVER_NAME, meaning the
> value of the part before ":" in the Host header, if any, or the resolved
> server
> name, or the server IP address.
> Returns: a String containing the name of the server
> 
> getServerPort()
> public int getServerPort()
> Returns the port number to which the request was sent. For HTTP servlets,
> same as the value of the CGI variable SERVER_PORT, meaning the value of the
> part after ":" in the Host header, if any, or the server port where the
> client
> connection was accepted on.
> Returns: an integer specifying the port number
> </spec-quote>
> 
> >
> > 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]>
> >
> 
> 
> --
> 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