[ 
https://issues.apache.org/jira/browse/CAMEL-9462?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15230135#comment-15230135
 ] 

Edward Welch commented on CAMEL-9462:
-------------------------------------

Hi Claus, please take a look at my pull request.

A couple of notes for posterity:

The original suspected culprit was not actually the issue:

{code}
//Remove host header unless instructed not to do so
            if(!getEndpoint().isPreserveHostHeader()){
                exchange.getIn().getHeaders().remove("host");
            }
{code}

I discovered this code was made redundant by CAMEL-6185 so I removed this block 
of code from the HTTP4 and Jetty producers

The Host header was still being removed by the changes introduced in 
CAMEL-6185, so I added a block of code after the headers are filtered where the 
new parameter is checked, if set true, and Host header on the exchange is not 
null, then the Host header is added to the outgoing http request.

I updated JettyBridgeHostHeaderIssueTest.java to validate the Host header as it 
isreceived by the downstream service for both when the new preserveHostHeader 
is true/false and for both the Jetty and HTTP4 producers

> HTTP 1.1 Host header be dealt wrongly in proxy & load balancer
> --------------------------------------------------------------
>
>                 Key: CAMEL-9462
>                 URL: https://issues.apache.org/jira/browse/CAMEL-9462
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-http, camel-http4
>    Affects Versions: 2.9.5, 2.10.3, 2.11.0
>            Reporter: Ian Hu
>             Fix For: 2.17.1, 2.18.0
>
>
> I have wrote code below make camel as a load balancer, but camel-http4(and 
> the camel-http, etc) deal the http header Host wrongly, it replace the Host 
> header with the host name of the backend of balancer, that make the backend 
> generate the wrong link.
>  
> {code:title=Main.java|borderStyle=solid}
> import org.apache.camel.impl.DefaultCamelContext;
> import org.apache.camel.model.RouteDefinition;
> public class Main {
>     public static void main(String[] args) throws Exception {
>         DefaultCamelContext context = new DefaultCamelContext();
>         RouteDefinition route = new RouteDefinition();
>         route.from("jetty:http://0.0.0.0:8080/?matchOnUriPrefix=true";)
>                 .loadBalance().roundRobin()
>                 
> .to("http4://127.0.0.1:8081/?bridgeEndpoint=true&throwExceptionOnFailure=false")
>                 
> .to("http4://127.0.0.1:8082/?bridgeEndpoint=true&throwExceptionOnFailure=false");
>         //
>         context.addRouteDefinition(route);
>         context.start();
>     }
> }
> {code}
> I have view the code and found a fix of 
> [https://issues.apache.org/jira/browse/CAMEL-5757](See the commit), it's 
> commits simply removed the host header 
> [https://fisheye6.atlassian.com/browse/camel-git/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpProducer.java?hb=true#to106].
>  and I really do not think it should be dealt like that.
> Some backend will use the Host header to generate link, and when the Host 
> header removed and then it be set to the backend's host, the backend got the 
> wrong Host, and generate the wrong link.
> I expect the link should be http://localhost:8080/web but it generate 
> http://127.0.0.1:8081/web or http://127.0.0.1:8082/web when I view the page 
> with the url http://localhost:8080



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to