[ 
https://issues.apache.org/jira/browse/ARTEMIS-4140?focusedWorklogId=970534&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-970534
 ]

ASF GitHub Bot logged work on ARTEMIS-4140:
-------------------------------------------

                Author: ASF GitHub Bot
            Created on: 23/May/25 20:33
            Start Date: 23/May/25 20:33
    Worklog Time Spent: 10m 
      Work Description: jbertram opened a new pull request, #5707:
URL: https://github.com/apache/activemq-artemis/pull/5707

   (no comment)




Issue Time Tracking
-------------------

            Worklog Id:     (was: 970534)
    Remaining Estimate: 0h
            Time Spent: 10m

> HTTP Transport - Wrong authority compoment in HTTP request causes 400 Bad 
> Request
> ---------------------------------------------------------------------------------
>
>                 Key: ARTEMIS-4140
>                 URL: https://issues.apache.org/jira/browse/ARTEMIS-4140
>             Project: ActiveMQ Artemis
>          Issue Type: Bug
>          Components: JMS
>    Affects Versions: 2.21.0
>         Environment: ActiveMQ Artemis 2.21
> JMS Client 2.21.0.redhat-00041 from maven.repository.redhat.com. I don't know 
> which upstream version it matches.
> Consumer/Producer is on a VM, HAProxy is the ingress controller of an 
> OpenShift (Kubernetes) cluster and the broker is hosted as a container on the 
> OpenShift platform.
>            Reporter: Ruben Rodrigues
>            Priority: Minor
>              Labels: pull-request-available
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> Hello everyone,
> I was trying to connect to an AMQ Artemis Broker using the following java 
> code example given in the github repository :
> [https://github.com/apache/activemq-artemis/tree/main/examples/features/standard/http-transport]
> Here, the broker is exposed over HTTP behind an HAProxy. When I try to make 
> the client connect to the broker, I keep having a timeout error, stating that 
> the client can't actually connect to the broker.
> {code:java}
> Exception in thread "main" javax.jms.JMSException: Failed to create session 
> factory
>     at 
> org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory.createConnectionInternal(ActiveMQConnectionFactory.java:867)
>     at 
> org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory.createConnection(ActiveMQConnectionFactory.java:284)
>     at 
> org.apache.activemq.artemis.jms.example.HttpTransportExample.main(HttpTransportExample.java:47)
> Caused by: ActiveMQConnectionTimedOutException[errorType=CONNECTION_TIMEDOUT 
> message=AMQ219013: Timed out waiting to receive cluster topology. Group:null]
>     at 
> org.apache.activemq.artemis.core.client.impl.ServerLocatorImpl.createSessionFactory(ServerLocatorImpl.java:743)
>     at 
> org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory.createConnectionInternal(ActiveMQConnectionFactory.java:865)
>     ... 2 more {code}
> So I digged an little and found that when the client tries to connect to the 
> broker, it sends the following HTTP request :
> {code:java}
> POST 
> http://broker-2-http-0-svc-rte-dc2.company.com:80/messaging/ActiveMQServlet 
> HTTP/1.1
> host: broker-2-http-0-svc-rte-dc2.company.com
> content-length: 21 {code}
> The HAProxy answers with a 400 Bad Request error because this request does 
> not comply with the RFC 7230 section 5.4, which states that :
> {code:java}
> If the target URI includes an authority component, then a client MUST send a 
> field-value for Host that is identical to that authority component {code}
> The authority component being the "<hostname>:<port>" string. RFC 7230 
> section 2.7.1 :
> {code:java}
> http-URI = "http:" "//" authority path-abempty [ "?" query ]
>                 [ "#" fragment ] {code}
> There is 3 solutions to resolve this :
>  - Remove the "<hostname>:<port>" part of the request and keep it in the Host 
> header
> {code:java}
> POST /messaging/ActiveMQServlet HTTP/1.1
> host: broker-2-http-0-svc-rte-dc2.company.com
> content-length: 21 {code}
>  - Remove the port in the request to match the host header
> {code:java}
> POST http://broker-2-http-0-svc-rte-dc2.company.com/messaging/ActiveMQServlet 
> HTTP/1.1
> host: broker-2-http-0-svc-rte-dc2.company.com
> content-length: 21 {code}
>  - Add the port in the Host header
> {code:java}
> POST 
> http://broker-2-http-0-svc-rte-dc2.company.com:80/messaging/ActiveMQServlet 
> HTTP/1.1
> host: broker-2-http-0-svc-rte-dc2.company.com:80
> content-length: 21 {code}
>  
> I honestly don't know which solution is the best.
> Hope this will be fixed soon,
> Thanks everyone



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscr...@activemq.apache.org
For additional commands, e-mail: issues-h...@activemq.apache.org
For further information, visit: https://activemq.apache.org/contact


Reply via email to