[ 
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: dev-unsubscr...@hc.apache.org
For additional commands, e-mail: dev-h...@hc.apache.org

Reply via email to