Hello, I noticed some interesting behavior when retrieving the port of a subrequest and am trying to determine if it's a bug or by design. Basically, the sub- request's parsed_uri port fields aren't preserved from the main request. With default canonical name settings, this leads to ap_get_server_port falling back to the port from the ServerName, whereas calling ap_get_server_port on the main request would use the port from the host header, potentially giving different results.
You can see this effect using mod_rewrite and lookahead variables: Listen 9090 ServerName localhost:9092 <Directory "${DOCROOT}/port"> RewriteEngine On RewriteRule ^ /?port=%{SERVER_PORT}&la-port=%{LA-U:SERVER_PORT} [R] </Directory> A request to localhost:9090/port redirects to /?port=9090&la-port=9092 This is different than internal redirects, which copy the port fields upon creating the new request (see internal_internal_redirect in http_request.c). The attached trunk patch would do the same for subrequests created via ap_sub_req_method_uri (but not for others). I also tried writing a test case, but httpd-test specifies a ServerName, and I'm not familiar enough with the framework to get around that. Any thoughts on the expected behavior would be appreciated. Regards, Paul Spangler LabVIEW R&D National Instruments
subrequest_port.patch
Description: subrequest_port.patch