You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@httpd.apache.org by Paul Spangler <pa...@ni.com> on 2017/09/07 23:06:18 UTC
ap_get_server_port for subrequest different than main request
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