-
Notifications
You must be signed in to change notification settings - Fork 856
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix ApacheHttpClient's handling of request bodies on DELETE, GET, HEAD & OPTIONS requests #5704
Fix ApacheHttpClient's handling of request bodies on DELETE, GET, HEAD & OPTIONS requests #5704
Conversation
4551670
to
53f190b
Compare
Awesome work! 👏 I just ran into this issue with the scroll API because the DELETE requests have a body. Thanks for looking into this. |
53f190b
to
c440059
Compare
...src/main/java/software/amazon/awssdk/http/apache/internal/impl/ApacheHttpRequestFactory.java
Show resolved
Hide resolved
Thanks for the PR, looks good overall! Builds are failing due to protocol tests which previously expected absent content length header, can we update the tests accordingly?
|
c50a248
to
222d1f6
Compare
Quality Gate passedIssues Measures |
@all-contributors please add @Xtansia for code |
I've put up a pull request to add @Xtansia! 🎉 |
Revert "Fix ApacheHttpClient's handling of request bodies on DELETE, GET, HEAD & OPTIONS requests (#5704)
Motivation and Context
Though providing request bodies on these HTTP methods is uncommon, it is not disallowed by the spec, and is used in certain Elasticsearch/OpenSearch APIs. Authenticating with Amazon OpenSearch Service can be done via SigV4 and we re-use the SDK's signing logic to provide that in https://github.com/opensearch-project/opensearch-java.
We've received multiple bug reports of users having trouble making certain requests using the
ApacheHttpClient
(opensearch-project/opensearch-java#712, opensearch-project/opensearch-java#521), where the client itself doesn't complain or error but silently drops the request body resulting in a mismatched signature on the server.The Netty & CRT
Sdk(Async)HttpClient
implementations correctly send the request body for all methods, URL Connection does as well with the exception ofGET
which is hardcoded to swap toPOST
(and doesn't supportPATCH
at all).As such I think it is not harmful to bring the Apache implementation in line with the other client implementations.
Modifications
Generalize the Apache HTTP request factory implementation to attach the request body entity on all HTTP methods.
This matches the original implementations of the separate method classes:
Testing
Added unit tests
Screenshots (if appropriate)
Types of changes
Checklist
mvn install
succeedsscripts/new-change
script and following the instructions. Commit the new file created by the script in.changes/next-release
with your changes.License