Federico Mariani created CAMEL-24625:
----------------------------------------

             Summary: camel-platform-http: CamelHttpPath should optionally be 
relative to the consumer path (stripUriPrefix)
                 Key: CAMEL-24625
                 URL: https://issues.apache.org/jira/browse/CAMEL-24625
             Project: Camel
          Issue Type: Improvement
          Components: camel-platform-http
            Reporter: Federico Mariani
            Assignee: Federico Mariani


*Use case:* building a path-based reverse proxy on platform-http — expose a 
backend under a prefix (e.g. {{/reverse-proxy/**}}) and forward to it 
({{http://backend/**}}), stripping the prefix. This is the standard 
reverse-proxy shape (nginx {{location}}, Spring Cloud Gateway {{StripPrefix}}, 
Traefik {{StripPrefix}}, Envoy {{prefix_rewrite}}) and today requires manual 
header surgery:

{code:java}
from("platform-http:/reverse-proxy?matchOnUriPrefix=true")
    .setHeader(Exchange.HTTP_PATH, 
simple("${header.CamelHttpPath.substring(14)}"))  // 14 == prefix length, 
duplicated by hand
    .to("http://backend?bridgeEndpoint=true";)
{code}

camel-servlet, camel-jetty, camel-netty-http and camel-undertow don't need this 
— their consumers already make CamelHttpPath relative to the registered 
consumer path, so bridgeEndpoint=true alone does the right thing. platform-http 
(both the Vert.x and Spring Boot/camel-platform-http-starter engines) is the 
one HTTP consumer that always reports the full raw path.

*Proposal:* add a {{stripUriPrefix}} consumer option (default {{false}}) to 
PlatformHttpEndpoint. When set, the matched consumer path is removed from 
CamelHttpPath (segment-boundary aware), so the reverse proxy above becomes:

{code:java}
from("platform-http:/reverse-proxy?matchOnUriPrefix=true&stripUriPrefix=true")
    .to("http://backend?bridgeEndpoint=true";)
{code}

CamelHttpUri/CamelHttpUrl keep the full path. Default is {{false}} to avoid a 
breaking change (existing Vert.x routes rely on the full path); aligning the 
default with the other consumers is left to a future major version.

Draft PR with a reference implementation: (to be linked).



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

Reply via email to