Hello everyone,

               Tomcat Version: 9.0.26
               OS: Windows and Linux

We recently upgraded from Tomcat 8.5.35 to 9.0.26 and in 9.0.26 there is change 
in default value of "allowHostHeaderMismatch" flag which is causing few issues 
for us.
               8.5.35  - Default value of allowHostHeaderMismatch is true. So 
it ALLOWS requests where the host headers don't match .
               9.0.26 -  Default value of allowHostHeaderMismatch is false. So 
it BLOCKS requests where the host headers don't match .

Our POST request header looks like this:
        POST https://linux-7f67.blr.abc.com:443/testUrl/ HTTP/1.1
Host: linux-7f67.blr.abc.com
User-Agent: gSOAP/2.8
Content-Type: text/xml; charset=utf-8
Content-Length: 1740
Connection: close

The content on the "Host" field i.e. "Host: linux-7f67.blr.abc.com"  is 
generated by gSOAP library and it ignores adding the port as it to talking to a 
default port.
The uri on the "POST" line i.e. "https://linux-7f67.blr.abc.com:443/testUrl/ " 
is generated by another tool and it seems to be explicit about the port even 
though it is using the default port.
There is some confusion in general on the internet about including Port in URL 
for default ports. Some say it is ok to include and some say it is redundant 
when using default port.

The check in tomcat at 
https://github.com/apache/tomcat/blob/ca66cfd3d6fae198fbcf76be09b3e8f3f8232c0a/java/org/apache/coyote/http11/Http11Processor.java#L686
  compares "linux-7f67.blr.abc.com" in Host to "linux-7f67.blr.abc.com:443" in 
the POST url and tomcat returns a 400 Badrequest because of the extra :443 in 
the URL.

[cid:image003.jpg@01D60CDF.A04BF0A0]

What is your take on this ?  Should the code in tomcat be checking just the 
fqdn without the port ?
Also would it be possible to include a fix so that it skips the default port 
(if present) and then compare? Non default ports to be still retained. Only 
default ports to be skipped.

Regards
Rajah Yoghindra


Reply via email to