[
https://issues.apache.org/jira/browse/HTTPCLIENT-2390?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18015807#comment-18015807
]
Arturo Bernal commented on HTTPCLIENT-2390:
-------------------------------------------
[~michael-o] Yes—ideally this should be fixed by the API provider. That said,
many users can’t change third-party/CDN gateways, so having an opt-in in Apache
HttpComponents is a useful safety valve
> Allow to control HTTP redirect 301/302 to not change POST to GET
> ----------------------------------------------------------------
>
> Key: HTTPCLIENT-2390
> URL: https://issues.apache.org/jira/browse/HTTPCLIENT-2390
> Project: HttpComponents HttpClient
> Issue Type: Improvement
> Affects Versions: 5.4.4
> Reporter: Claus Ibsen
> Priority: Major
> Time Spent: 10m
> Remaining Estimate: 0h
>
> At Apache Camel we have users reporting a situation with using a graphql
> service that returns a 301 redirect and this causes the call to fail because
> the payload is removed due to POST becomes GET. This is correct according to
> HTTP spec. But often the real world is "different" and it would be good if
> there was an option or some enhanced API in RedirectStrategy so end users can
> handle this.
>
> If you look at the source code in
> org/apache/httpcomponents/client5/httpclient5/5.4.4/httpclient5-5.4.4-sources.jar!/org/apache/hc/client5/http/impl/async/AsyncRedirectExec.java:149
> You can see how status 301/302 is forced to change POST to GET. This is what
> would be good if there was some flag or API to decide not to do that.
>
> The Apache Camel use-case
> it is v2:
> rest("/v2/swapi-graphql/all-films").get()
> .produces("application/json")
> .to("direct:swapi-graphql-all-films2");
> from("direct:swapi-graphql-all-films2")
> .setBody(constant("\{ allFilms { films { title director releaseDate } } }"))
> .to("graphql://[https://swapi-graphql.netlify.app/.netlify/functions/index]")
> .convertBodyTo(String.class);
> The reason for the failure is interesting:
> 1. GraphQL component constructs POST and invokes HTTP
> 2. netlify's index URL returns 301 with /graphql - and that forces POST to
> be changed to GET by underlying http client.
> looking at HTTP spec - it should have been 308
> [https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/308] -
> but haven't seen 308 adopted widely.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]